问题描述
令我感到困惑的gitops部分是关于将源代码与清单分开的建议,例如argocd对此要说的是:
强烈建议使用其他Git存储库来保存kubernetes清单(与应用程序源代码分开)。有关更多理由,请参见best practices。
在一个典型的项目中,我将使用gitlab设置测试环境,然后使用on_stop
action删除每个PR的环境。但是,如果我将清单文件与源代码分开,则不清楚argocd应该在看什么。
为示例起见,假设我们有两个存储库:
-
foo
托管应用代码 -
bar
托管不同应用的清单
假设:
- 我在
feature-001
分支中创建了一个新分支foo
。 - 每次我们向
feature-001
添加提交时,都会创建一个新的docker图像(foo:$COMMIT_SHA
)。
我将如何创建一个argocd受控的应用程序来监视此分支的更改?
我当然可以使用CLI创建应用程序:
argocd app create "foo-$COMMIT_SHA" --repo https://github.com/gajus/bar.git --path bar -p image=foo:$COMMIT_SHA
但是ArgoCD如何知道要跟踪该feature-001
分支的更改?即从该分支发布新的Docker映像时,如何告诉argocd部署该应用程序的新版本?
解决方法
我将如何创建一个
argocd
受控的应用程序来监视此分支的更改?
我不确定您为什么不使用CLI选项。 CLI可以创建一个应用程序,其中包括指向git修订版(can be a branch)。
例如:
argocd app create "foo-$COMMIT_NAME"
--repo https://github.com/gajus/bar.git
--path bar
--revision $BRANCH_NAME
--parameter image=foo:$COMMIT_SHA
--sync-policy automated
请注意此处设置的自动同步策略。这意味着对修订的任何更新都将更新分支。
从该分支发布新的Docker映像时,我如何告诉argocd部署该应用程序的新版本
以上答案解释了ArgoCD应用程序如何跟踪git的变化,但是这个问题暗示了更新部署/复制清单清单中的标签的问题。这在很大程度上取决于您如何为主分支执行此操作。有些人将进行硬编码,另一些人将$COMMIT_SHA
从仓库foo
提交到仓库bar
,而其他人则使用模板语言并注入变量。
基于您的关注,我将假设您遵循从仓库foo
到仓库bar
的提交方式。如果是这种情况,我建议将标志--upsert
添加到CLI命令中,并在分支管道中每次都运行相同的CLI命令。
注意:此处添加的奖励选项是为--label branch=${BRANCH_NAME}
之类的东西添加一个附加标志。然后可以将其用于定期查找/清除任何分支部署。