如何为管道中的 Dockerfile 代理覆盖 Jenkins 的随机图像标签

Mil*_*lad 5 jenkins-docker jenkins-pipeline

我的 Jenkinsfile 中有一个使用Dockerfile代理运行的步骤。当 jenkins 创建 docker 镜像时,它会给它一个随机的长标签,我想用我自己的标签替换它。我尝试使用传递标签,additionalBuildArgs但这为 docker 图像提供了一个额外的标签。

agent {
        dockerfile {
            additionalBuildArgs '-t my-image:latest'
        }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法阻止詹金斯传递标签?

Tid*_*ach 5

控制此操作的插件是pipeline-model-definition-plugin

您可以在插件的代码中看到图像名称是项目名称和 dockerfile 路径的哈希值:

def hash = Utils.stringToSHA1("${runWrapper.fullProjectName}\n${script.readFile("${dockerfilePath}")}")
def imgName = "${hash}"
Run Code Online (Sandbox Code Playgroud)

然后它获取额外的参数并将它们添加到图像名称中:

def additionalBuildArgs = describable.getAdditionalBuildArgs() ? " ${describable.additionalBuildArgs}" : ""
script.sh "docker build -t ${imgName}${additionalBuildArgs} -f \"${dockerfilePath}\" \"${describable.getActualDir()}\""
Run Code Online (Sandbox Code Playgroud)

因此,通过使用 dockerfile 步骤,名称似乎始终是哈希值。

  • @yarafed 不幸的是,在花了很多时间试图让它工作之后,我意识到声明性语法对于我想做的事情来说是无用的。迄今为止,相关 Jenkins JIRA 票证中几乎没有任何关于此问题的活动。我必须切换到命令式语法,并在“script”块中自己执行“docker.build()”;这是唯一的办法。 (2认同)