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