0

我想要一个 CI 管道来构建图像和 Helm 图表。其中一部分当然是在发布之前设置 Helm 图表的 FQIN。

有很多关于如何在安装期间执行此操作的示例,但在打包期间没有。我很惊讶我在https://helm.sh上找不到这个常见用例的示例。手动编辑图表的值文件不是一个选项,因为它是一个 CI 管道。

在不引入复杂 CICD 工具的情况下执行此操作的最佳实践是什么。

4

1 回答 1

3

您的“完全限定的映像名称”由三部分组成:注册表主机名、映像名称本身和映像的标记。我建议将所有三个作为 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选项传递,而不是使用--setor --set-string。语法更加熟悉,并且您可以在重要时更好地控制对象类型。

有一种替代方法涉及实际编辑图表作为构建的一部分。您可能有一个“GitOps”风格的工作流程,其中您的构建系统的一部分实际上提交到源代码控制,并且由此产生的推送触发下一步。这有一些优点,因为它很容易验证一个阶段的文件输出,并且很容易看到确切部署的历史(因为部署历史是源代码控制历史)。

为此,您的 CI 系统本身需要更改 tag:. 有一个可以与之匹配的设置,另外,如果您要对图表本身进行自动更改,增加图表的. CI 系统将进行这些更改、提交和推送,然后推送将触发自身进行下一步部署。因为现在正确的设置在你不需要一个选项。values.yamlChart.yamlappVersion:version:values.yaml--set-string

于 2021-12-06T11:24:58.003 回答