给定一个带有图像标签的注册表,例如:
myimage 0.0.3
myimage 0.0.2
我可以以某种方式将0.0.3
(或者说最新的标签)提取到bash中的变量中吗?
我想找出这个值,以便我可以tagValue++
然后在Jenkins管道中使用它来执行以下操作:
docker build
使用更新的代码构建下一张图片docker push
将此新图片代码推送到注册表kubectl set image
使用更新的图片代码当然,如果有人有更好的策略,我全都听到了!
备选方案:
从Kubernetes Deployment的YAML文件中获取值,然后运行上述操作,使用更新的标记更新文件并将更新的文件推送回存储库?
与上述替代方案相同,但使用kubectl replace
代替kubectl set image
? (example here来自文档)
答案 0 :(得分:1)
我们在内部v2 docker注册表中使用它。它取决于jq,所以它可能不适合你。注册表似乎按照添加它们的顺序返回它们,所以我们只是抓住最新的,如果你有足够新的版本,这很可能是jq:
tags_url="https://hot.registry.example.com/v2/somerepoprefix/${repo}/tags/list"
newest_tag=$(curl $tags_url | jq -r '(.tags | reverse)[0]')
答案 1 :(得分:1)
不同的方法,但我使用jenkins ${BUILD_NUMBER}
环境变量来标记图像。另外,我向前移动latest
标签,因此我有两个选项可供使用。这导致相同的图像多次标记不同的构建号(如果没有变化),但我的设置很好。
因为我使用不同的Jenkins作业来构建图像和更新k8s,所以我使用jenkins api来获取作业中的最新版本号:
containerTag=$(curl -u $user:$cred 'http://localhost:8080/job/$jobname/lastStableBuild/buildNumber')