You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调整GitLab CI实现ArgoCD基于单Helm Chart部署多K8s应用

解决ArgoCD基于单个Helm Chart批量部署多应用的问题

当前核心问题是现有GitLab CI仅生成单个ArgoCD Application,只能部署指定的approach1.yaml对应的应用。以下提供两种可行方案,实现自动检测GitLab中argocd-apps/prm-helmchart/value_files路径下的所有value文件并部署对应应用。


方案一:用ArgoCD ApplicationSet批量管理(推荐)

ApplicationSet是ArgoCD官方提供的批量应用管理工具,能自动监听Git仓库的文件变更,自动生成/更新对应的ArgoCD Application资源,无需每次变更都触发GitLab CI重新生成配置。

操作步骤

  1. 确认ApplicationSet控制器已安装
    先确保你的ArgoCD集群中已部署ApplicationSet控制器(可通过ArgoCD官方安装步骤完成)。

  2. 修改GitLab CI部署ApplicationSet
    替换原有CI的prepare和deploy阶段,直接部署ApplicationSet资源:

stages:
  - deploy

deploy:
  stage: deploy
  image: google/cloud-sdk:latest
  script:
    - gcloud container clusters get-credentials my-gke-cluster1 --zone australia-southeast1-a --project my-project-v1
    - |
      cat <<EOF | kubectl apply -f -
      apiVersion: argoproj.io/v1alpha1
      kind: ApplicationSet
      metadata:
        name: prm-multi-apps
        namespace: argocd
      spec:
        generators:
          - git:
              repoURL: "https://gitlab.com/gitlab1511220/argocd-apps.git"
              revision: HEAD
              files:
                - path: "argocd-apps/prm-helmchart/value_files/*.yaml"
        template:
          metadata:
            name: "{{path.basenameWithoutExtension}}-app"
          spec:
            project: default
            source:
              repoURL: "cstmimgjfrog.jfrog.io"
              chart: "helm-oci-local/oci"
              targetRevision: "0.1.0"
              helm:
                valueFiles:
                  - "argocd-apps/prm-helmchart/value_files/{{path.basename}}"
            destination:
              server: "https://kubernetes.default.svc"
              namespace: py-apps
            syncPolicy:
              automated:
                prune: true
                selfHeal: true
      EOF

效果

当GitLab仓库中value_files目录新增、修改或删除yaml文件时,ApplicationSet会自动检测到变化,生成对应名称的ArgoCD Application(比如approach1.yaml对应approach1-app),并自动同步部署到K8s集群。


方案二:调整GitLab CI遍历生成多个Application

如果暂时不想用ApplicationSet,可以修改CI流程,遍历value_files目录下的所有yaml文件,为每个文件生成独立的ArgoCD Application资源。

调整后的.gitlab-ci.yml

stages:
  - prepare
  - deploy

prepare:
  stage: prepare
  script:
    - git clone https://$CI_GITLAB_USER:$CI_GITLAB_TOKEN@gitlab.com/gitlab1511220/argocd-apps.git
  artifacts:
    paths:
      - argocd-apps/prm-helmchart/value_files/

deploy:
  stage: deploy
  image: google/cloud-sdk:latest
  script:
    - gcloud container clusters get-credentials my-gke-cluster1 --zone australia-southeast1-a --project my-project-v1
    # 遍历所有value文件,逐个创建ArgoCD Application
    - |
      for file in argocd-apps/prm-helmchart/value_files/*.yaml; do
        app_name=$(basename "$file" .yaml)-app
        cat <<EOF | kubectl apply -f -
      apiVersion: argoproj.io/v1alpha1
      kind: Application
      metadata:
        name: $app_name
        namespace: argocd
      spec:
        project: default
        source:
          repoURL: 'cstmimgjfrog.jfrog.io'
          chart: 'helm-oci-local/oci'
          targetRevision: '0.1.0'
          helm: 
            valueFiles:
              - $file
        destination:
          server: 'https://kubernetes.default.svc'
          namespace: py-apps
        syncPolicy:
          automated:
            prune: true
            selfHeal: true
      EOF
      done
  dependencies:
    - prepare

效果

GitLab CI触发时,会克隆value_files目录,然后为每个yaml文件生成对应的ArgoCD Application,实现多应用部署。后续只要GitLab中该目录的文件有变更,CI触发后就会自动更新对应应用的配置。


关键注意事项

  • 若使用方案一,需保证ArgoCD有权限访问你的GitLab私有仓库(可在ArgoCD中配置Git仓库凭据)
  • 方案一更适合长期维护,因为无需依赖GitLab CI的触发,ApplicationSet会主动监听Git仓库变化
  • 两种方案都开启了syncPolicy.automated,会自动同步应用配置并清理不再需要的资源

内容的提问来源于stack exchange,提问作者sdate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 19:44:52