Automation使用微服务构建Docker映像,并将该映像推送到以分支名称registry/service-name:branch
标记的JFrog Artifactory注册表中。下一步,它将应用Kubernetes yaml清单文件,并在适当的Kubernetes节点上拉取映像后启动应用程序。
问题出在后面-当我将微服务源代码中的更改推送到存储库中时,自动化开始了:
我猜是因为Kubernetes yaml清单文件的“ Deployment”部分没有更改,并且Kubernetes不会从JFrog注册表中提取更新的映像,所以发生了。解决方法是,在每次重新部署时,我都将时间戳注释插入模板部分:
"template": {
"metadata": {
"labels": {
"app": "service-name"
},
"annotations": {
"timestamp": "1588246422"
但是奇迹并没有发生-仅当我删除Kubernetes部署并重新部署应用程序时才更新映像(可能在这种情况下,它只是从另一个节点开始,并且需要docker pull)。
是否可以设置Kubernetes或配置清单文件,如何在每次重新部署时强制Kubernetes提取映像?
答案 0 :(得分:1)
我建议以registry/service-name:branch-git-sha
或registry/service-name:git-sha
的样式标记图像,这将自动拉出图像。
或者,作为解决方法,您可以保留当前的图像标签系统,并在模板中添加一个环境变量,该变量将设置为时间戳记。
更改环境变量将始终导致容器和配置imagePullPolicy: Always
一起重启。