当托管清单与源代码分开时,如何创建功能分支?

问题描述

令我感到困惑的部分是关于将源代码与清单分开的建议,例如对此要说的是:

强烈建议使用其他Git存储库来保存kubernetes清单(与应用程序源代码分开)。有关更多理由,请参见best practices

在一个典型的项目中,我将使用设置测试环境,然后使用on_stop action删除每个PR的环境。但是,如果我将清单文件与源代码分开,则不清楚应该在看什么。

为示例起见,假设我们有两个存储库:

  • foo托管应用代码
  • bar托管不同应用的清单

假设:

  1. 我在feature-001分支中创建了一个新分支foo
  2. 每次我们向feature-001添加提交时,都会创建一个新的图像(foo:$COMMIT_SHA)。

我将如何创建一个受控的应用程序来监视此分支的更改?

我当然可以使用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受控的应用程序来监视此分支的更改?

我不确定您为什么不使用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}之类的东西添加一个附加标志。然后可以将其用于定期查找/清除任何分支部署。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...