如何在CI中参数化Helm值到yaml文件中?

发表于: 2020-12-13   最后更新时间: 2020-12-13 22:05:54   1,146 游览

我有2个项目:

  • 项目A - 包含我的微服务应用程序的源代码
  • 项目B - 包含使用Helm项目A的Kubernetes。

两个项目都驻扎在各自独立的git仓库中。

项目A使用一个完整的CI管道进行构建,构建一个带有标签版本的Docker镜像并将其推送到Docker中心,然后通过CI服务器的git推送将Docker镜像的版本号写入项目B。它是通过提交一个简单的txt文件来实现的,其中包含了它刚刚构建的Docker版本。

到目前为止,一切正常。我现在有了包含微服务项目A的Docker版本的项目B,我现在想把这个值传递/注入到Values.yaml中,这样当我通过Helm打包项目B时,我就有了最新的版本。

有什么办法可以让我实现这个功能吗?

发表于 2020-12-13

我通常在这里做的是,直接把值写到yaml的正确字段中。要在命令行上使用yaml,我推荐使用cli工具yq

我通常使用完整的Kubernetes部署清单yaml,我通常用这个yq命令更新image字段。

yq write --inplace deployment.yaml 'spec.template.spec.containers(name==myapp).image' <my-registry>/<my-image-repo>/<image-name>:<tag-name>
and after that commit the yaml file to the repo with yaml manifests.

现在,你使用了Helm,但它仍然是Yaml,所以你应该可以用类似的方法来解决这个问题。也许像这样

yq write --inplace values.yaml 'app.image' <my-image>
你的答案

查看kubernetes相关的其他问题或提一个您自己的问题