我有一个jenkins实例(实际上在docker中运行)用于我的Continous Integration。
jenkins服务器在外部docker主机上构建docker镜像,测试它们,然后将它们推送到my-app:tested
标记。
现在,当我构建一个版本时,我想将docker镜像从测试版重新标记为vX.X
。我不想要使用新标签重建图像,我想重新标记现有图像。
如何用詹金斯做到这一点?我正在浏览jenkins插件,找不到具备此功能的插件。
答案 0 :(得分:2)
如this blog post所示,您可以使用push命令添加两个标签,如下所示:
stage('Push image') {
docker.withRegistry('https://registry.hub.docker.com', 'docker-hub-credentials') {
app.push("${env.BUILD_NUMBER}")
app.push("latest")
}
}
PS请注意,如果您正在阅读这本Jenkins第三方博客文章,则该文章不会计入文档。如果对此进行了正确记录,则可以更快地解决此问题。
答案 1 :(得分:0)
由于您没有链接到您使用的任何插件,我不能轻易地说它们是否能够重新标记现有图像,但是可以通过基于shell的作业。
如果在Jenkins中使用shell(bash或类似的)脚本,则可以使用标准docker命令轻松执行此操作,以标记现有图像。如果您的my-app:test图像已经在本地缓存为您的jenkins构建作业,则可以运行:
docker login -u $USER -p $PASSWORD <myregistry.example.org>
docker pull my-app:tested
docker tag my-app:tested my-app:vX.X
docker push my-app:vX.X
如果my-app:tests在本地缓存为jenkins作业,则可以省略docker pull
命令。有关详细信息,请参阅docker tag documentation。如果这个基于shell命令的工作流程不适合基于插件的构建工作流程,我不知道你会怎么做。
我个人不使用Jenkins或Jenkins插件来构建docker镜像,所以我不熟悉构建Docker镜像的插件如何在Jenkins中运行。其他人可能能够帮助您使用基于插件的构建作业。
答案 2 :(得分:0)
我将以下内容添加到其他答案中:
app.tag(["tag1","latest"])
Image.tag([标签名])
运行docker标签以记录该图像的标签(默认为其已具有的标签)。如果存在标签,将重写现有标签。
从Jenkins码头工人步骤文档中,在https:// your / jenkins / instance / URL / pipeline-syntax / globals#docker