我已经开始了使用 k8s 和 argoCD 的 GitOps 之旅,使用单独的存储库来存储应用程序源和部署文件(清单、环境配置等),并且我正在尝试弄清楚,如果应用程序源代码更改还需要更改环境配置。
示例:应用程序已部署并在测试/QA 环境中运行,我想推送代码更改,这需要新的“DB_ConnectionString”环境变量。 由于此环境变量是新的,因此它不存在于我的部署/gitops 存储库的配置文件中(假设它是 Helm 值-QA.yml)。
如果我推送这个新的代码更改,CI 将构建应用程序并更新容器,这会提示 argoCD 部署新的容器版本 - 但因为我还没有更新 GitOps 存储库,所以它缺少这个新变量,并且部署将会失败。
我想我很难理解,如果在这些情况下,我被迫始终确保我的 GitOps 存储库在我的应用程序存储库之前更新,以及是否有最佳实践来处理此流程?
您想要的是利用“应用程序的多个来源”
更多信息在这里: https://argo-cd.readthedocs.io/en/stable/user-guide/multiple_sources/
例如:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: guestbook
namespace: argocd
spec:
project: default
destination:
server: https://kubernetes.default.svc
namespace: default
sources:
- chart: elasticsearch
repoURL: https://helm.elastic.co
targetRevision: 8.5.1
- repoURL: https://github.com/argoproj/argocd-example-apps.git
path: guestbook
targetRevision: HEAD
通过这种方法,您可以混合源,如果将其与“同步阶段和波”结合使用,您可以优先考虑部署顺序。
更多信息在这里: https://argo-cd.readthedocs.io/en/stable/user-guide/sync-waves/