【发布时间】:2022-02-03 11:56:48
【问题描述】:
我正在考虑使用 Jenkins 和 ArgoCD 在我的集群中设置 GitOps CI/CD 管道。
首先,我想为我的 CI 环境创建一个存储库,其中包含一些用于我的应用程序的 Helm 图表的值文件。
我无法真正弄清楚的一件事是,如何在不更改文件整体结构的情况下自动编辑 Helm 值文件。
用于读取和写入 yaml 文件的 Jenkins 管道方法将完全重新创建它,并在此过程中重新格式化整个文件。
yq 不会(似乎)重新排序键,但它会删除空行和 cmets,例如。
我想到的唯一其他事情是使用sed。但这感觉有点不对劲。它可能很容易破裂。就像我在另一个同名的组中添加第二个键一样。或者添加或删除键。
为了更清楚,这里举个例子:
我有两个存储库,一个用于我的应用程序,一个用于我的 CI、NI 等配置。
我的应用程序仓库并不那么重要。只是一些应用程序。我的配置存储库看起来有点像这样:
.
...
├── ci
│ ├── app1
│ │ ├── Chart.yaml
│ │ ├── values.yaml
│ ├── app2
...
├── staging
│ ├── app1
│ │ ├── Chart.yaml
│ │ ├── values.yaml
│ ├── app2
...
app1 在ci 文件夹中的values.yaml 文件可能如下所示:
app1:
image:
tag: 1.33.7
ingress:
enabled: true
hosts:
- app1.my-internal-ci.company.com
...
实际的舵图在其他地方,这里只是环境中应用程序的配置。
ArgoCD 监视此 repo 并注意所需状态(由 repo 的状态指定)和集群中的实际状态匹配(有关该工具的更多信息,请参阅 https://argoproj.github.io/cd/)。
作为最后一步,我的app1 的 CI 管道从我的应用程序仓库中的代码构建 docker 映像,应该使用新版本 @ 更新配置仓库中 ci 文件夹中的 values.yaml 文件987654332@ 刚刚构建的应用程序并将其作为新提交推送到主分支。
除此之外,还配置了其他值,例如入口,如果需要,我会在 repo 中手动更新。
由于文件由 CI 构建管道自动更新并由开发人员/DevOps 工程师手动更新,因此我希望能够使它们易于被人类阅读(键的顺序、换行符、cmets ...... )
还有其他方法可以实现吗?
提前致谢!
【问题讨论】:
-
您能更具体地说明您要完成的工作吗?为什么要编辑值文件?你可以在 CI 中使用 不同的 值文件吗?这个问题有一个具体的例子会更好。
-
我添加了一个示例以使其更清晰。
标签: jenkins yaml kubernetes-helm gitops