我想要一个 CI 管道来构建图像和 Helm 图表。其中一部分当然是在发布之前设置 Helm 图表的 FQIN。
有很多关于如何在安装期间执行此操作的示例,但在打包期间没有。我很惊讶我在https://helm.sh上找不到这个常见用例的示例。手动编辑图表的值文件不是一个选项,因为它是一个 CI 管道。
在不引入复杂 CICD 工具的情况下执行此操作的最佳实践是什么。
我想要一个 CI 管道来构建图像和 Helm 图表。其中一部分当然是在发布之前设置 Helm 图表的 FQIN。
有很多关于如何在安装期间执行此操作的示例,但在打包期间没有。我很惊讶我在https://helm.sh上找不到这个常见用例的示例。手动编辑图表的值文件不是一个选项,因为它是一个 CI 管道。
在不引入复杂 CICD 工具的情况下执行此操作的最佳实践是什么。
您的“完全限定的映像名称”由三部分组成:注册表主机名、映像名称本身和映像的标记。我建议将所有三个作为 Helm 值传递,即使其中只有一些会改变。
image: '{{ .Values.registry }}/{{ .Values.image }}:{{ .Values.tag }}'
registry: docker.io
image: my/image
tag: latest
(当 Docker Hub 开始限速时,我开始非常感谢您可以将注册表地址配置为指向本地镜像的图表。)
那么当你去实际部署镜像时,你需要指定标签。在 Kubernetes 中,您几乎都需要为每个构建使用唯一的标签。
docker build -t my/image:20211206 .
docker push my/image:20211206
helm upgrade --install --namespace myapp myapp ./charts/myapp \
--set-string tag=20211206
如果您的 CI 系统可以写出 JSON 文件,请考虑将标签和其他部署时设置放入 JSON 文件并将其作为helm install -f
选项传递,而不是使用--set
or --set-string
。语法更加熟悉,并且您可以在重要时更好地控制对象类型。
有一种替代方法涉及实际编辑图表作为构建的一部分。您可能有一个“GitOps”风格的工作流程,其中您的构建系统的一部分实际上提交到源代码控制,并且由此产生的推送触发下一步。这有一些优点,因为它很容易验证一个阶段的文件输出,并且很容易看到确切部署的历史(因为部署历史是源代码控制历史)。
为此,您的 CI 系统本身需要更改 tag:
. 有一个可以与之匹配的设置,另外,如果您要对图表本身进行自动更改,增加图表的. CI 系统将进行这些更改、提交和推送,然后推送将触发自身进行下一步部署。因为现在正确的设置在你不需要一个选项。values.yaml
Chart.yaml
appVersion:
version:
values.yaml
--set-string