无需Git/Helm仓库,通过Argo CD部署动态生成应用可行吗?
可以实现,以下是几种适配你现有架构的方案
方案1:Jenkins生成清单后通过Argo CD API/CLI提交部署
完全贴合你当前的Jenkins工作流,仅把helm install/upgrade替换为Argo CD的部署调用:
- 保留Jenkins从PostgreSQL拉取环境值、密钥的逻辑,继续用Helm渲染出最终的Kubernetes清单(用
helm template命令)。 - 借助Argo CD的CLI(
argocd)或REST API,直接创建/更新一个使用inline源的Application,把渲染好的清单内容嵌入到Application定义中,不需要存储到任何Git/Helm仓库。 - 示例CLI命令:
# 从PostgreSQL拉取配置并渲染Helm清单到临时文件 helm template my-app ./chart --values <(psql -t -c "SELECT config FROM env_config WHERE app='my-app'") > rendered.yaml # 创建Argo CD Application,用inline方式加载清单 argocd app create my-app \ --project default \ --dest-server https://kubernetes.default.svc \ --dest-namespace my-namespace \ --inline rendered.yaml # 触发同步部署 argocd app sync my-app - 后续更新时,重新渲染清单后执行
argocd app set my-app --inline new-rendered.yaml,再同步即可。
方案2:让Argo CD直接对接PostgreSQL完成动态渲染
把Helm渲染逻辑从Jenkins转移到Argo CD,减少中间环节:
- 仅将通用的基础Helm Chart(不含动态配置的模板)放在极简的Git/Helm仓库(无需存储动态生成的清单)。
- 用External Secrets Operator (ESO) 从PostgreSQL同步环境值、密钥到集群的Secrets/ConfigMaps中。
- 在Argo CD的Application配置里,引用这些Secrets/ConfigMaps作为Helm的values参数,让Argo CD自动完成模板渲染和部署。
- 优势:无需Jenkins参与渲染,Argo CD全程负责从数据源拉取配置、渲染、部署,不存储动态生成的清单。
方案3:一次性临时部署(适合无需持续同步的场景)
如果你的应用不需要Argo CD持续维护状态,仅用它替代helm命令做部署:
- Jenkins生成清单后,创建带有
applyOnce: true同步策略的Argo CD Application,部署完成后Argo CD不会持续监控同步状态。 - 可选部署后删除该临时Application,避免Argo CD应用列表冗余。
注意事项
- 确保Jenkins拥有Argo CD的操作权限(通过token认证),并配置好
argocdCLI或API调用环境。 - Inline源的清单有大小限制(默认约1MB),若应用清单过大,建议拆分或改用方案2。
- 若需要Argo CD持续同步应用状态,每次配置更新后需重新提交最新的inline清单到Application中。
内容的提问来源于stack exchange,提问作者Shailendra Sharma
相关产品推荐
相关产品推荐

