我的团队使用 Helm 在 Gitlab 中开发了一个 kubernetes 应用程序。作为我们审查过程的一部分,我们将应用程序的一个实例部署到 MR 上的命名空间中。构建 Docker 镜像并将其标记为最新(对于当前主稳定版)或更改的分支。
我希望评论应用程序自动使用最新的分支(如果存在),否则使用最新的,希望不需要干预来手动修改图像标签。
最干净的方法是什么?我看过很多地方
我的团队使用 Helm 在 Gitlab 中开发了一个 kubernetes 应用程序。作为我们审查过程的一部分,我们将应用程序的一个实例部署到 MR 上的命名空间中。构建 Docker 镜像并将其标记为最新(对于当前主稳定版)或更改的分支。
我希望评论应用程序自动使用最新的分支(如果存在),否则使用最新的,希望不需要干预来手动修改图像标签。
最干净的方法是什么?我看过很多地方
您可以在使用--set
. 因此,对于管道中的不同分支(主分支和非主分支),您可以有不同的阶段,您将在一个阶段通过--set dockerImageTag=latest
,对于 MR 分支,它将是--set dockerImageTag=<branch-name>
.
mr-build-deploy:
only:
- merge_requests
script:
- docker build ...
- docker tag <docker-tag-name>
- helm install --set dockerImageTag=<docker-tag-name> ...
...
master-build-deploy:
only:
- master
script:
- docker build ...
- docker tag latest
- helm install --set dockerImageTag=latest ...
...
或者在values.yaml
lem 图表中,您可以将默认值设置dockerImageTag
为最新,因此对于主步骤,您不需要指定它。
说到最佳实践,不建议使用 latest 标签,而是使用版本号(例如SemVer的形式),这样您就可以确定 docker 映像中的哪些更改会破坏应用程序。