我们当前的CI部署阶段的工作方式如下:
- 构建容器。
- 将镜像标记为“latest”和“< commit hash >”。
- 将镜像推送到仓库。
- 在适当的RC上调用滚动更新。
这对于基于RC的部署效果很好,但现在由于Deployment对象变得更加稳定并成为底层功能,我们希望利用这种抽象方式来改善当前的部署方案和开发阶段。
我遇到的问题是找到一种合理的方式来自动更新CI工作流中的Deployment。 我一直在尝试分割git repo并尝试以下步骤:
- [应用程序构建] 构建容器。
- [应用程序构建] 将镜像标记为“latest”和“< commit hash >”。
- [应用程序构建] 将镜像推送到仓库。
- [应用程序构建] 调用应用程序的“Deployment” repo的构建,并传递当前的commit hash。
- [部署构建] 插值替换(目前仅使用传递的提交哈希,例如
image: app-%%COMMIT_HASH%%
)。 - [部署构建] 将更新后的部署清单应用于适当的“Deployment”资源。
但肯定还有更好的方法来处理这个问题。如果Deployment
监视图像的“latest”标签的哈希值变化,那么就太棒了...也许它已经实现了?我尝试过,但没有成功。 如果您对如何更好地处理Deployment
的部署有任何想法或见解,将不胜感激 :)
kubectl apply
进行了封装,以便插入环境变量令牌。使用这个包装器,我可以构建镜像,将其标记为构建 ID,并触发关联的Deployment
存储库的后续构建/部署,在那里它将获取传递的镜像构建 ID 并填充适当的令牌,例如image: app:{{ IMAGE_BUILD_REF }}
。 - Leetbulb:latest
标签,原因在于:http://developers.redhat.com/blog/2016/02/24/10-things-to-avoid-in-docker-containers/ - 参见“6)不要仅使用“latest”标签”。 - janetkuo