如何提取Docker镜像标记的值

时间:2017-04-20 21:50:57

标签: bash jenkins kubernetes

给定一个带有图像标签的注册表,例如:

myimage  0.0.3              
myimage  0.0.2              

我可以以某种方式将0.0.3(或者说最新的标签)提取到bash中的变量中吗? 我想找出这个值,以便我可以tagValue++然后在Jenkins管道中使用它来执行以下操作:

  • docker build使用更新的代码构建下一张图片
  • docker push将此新图片代码推送到注册表
  • kubectl set image使用更新的图片代码
  • 更新带有pod的Kubernetes群集

当然,如果有人有更好的策略,我全都听到了!

备选方案:

  • 从Kubernetes Deployment的YAML文件中获取值,然后运行上述操作,使用更新的标记更新文件并将更新的文件推送回存储库?

  • 与上述替代方案相同,但使用kubectl replace代替kubectl set image? (example here来自文档)

2 个答案:

答案 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')