如何为管道中的 Dockerfile 代理覆盖 Jenkins 的随机图像标签
How to override Jenkins' random image tag for a Dockerfile agent in a pipeline
我的 Jenkinsfile 中有一个步骤使用 Dockerfile
代理运行。当 jenkins 创建 docker 图像时,它给它一个随机的长标签,我想用我自己的标签替换它。我尝试使用 additionalBuildArgs
传递标签,但这给了 docker 图像一个额外的标签。
agent {
dockerfile {
additionalBuildArgs '-t my-image:latest'
}
}
有没有办法阻止 Jenkins 传递标签?
控制这个动作的插件是pipeline-model-definition-plugin。
你可以在 plugin's code 看到图像名称是项目名称和 dockerfile 路径的哈希:
def hash = Utils.stringToSHA1("${runWrapper.fullProjectName}\n${script.readFile("${dockerfilePath}")}")
def imgName = "${hash}"
然后它获取额外的参数并将它们添加到图像名称中:
def additionalBuildArgs = describable.getAdditionalBuildArgs() ? " ${describable.additionalBuildArgs}" : ""
script.sh "docker build -t ${imgName}${additionalBuildArgs} -f \"${dockerfilePath}\" \"${describable.getActualDir()}\""
因此,通过使用 dockerfile 步骤,名称似乎始终是哈希值。
我的 Jenkinsfile 中有一个步骤使用 Dockerfile
代理运行。当 jenkins 创建 docker 图像时,它给它一个随机的长标签,我想用我自己的标签替换它。我尝试使用 additionalBuildArgs
传递标签,但这给了 docker 图像一个额外的标签。
agent {
dockerfile {
additionalBuildArgs '-t my-image:latest'
}
}
有没有办法阻止 Jenkins 传递标签?
控制这个动作的插件是pipeline-model-definition-plugin。
你可以在 plugin's code 看到图像名称是项目名称和 dockerfile 路径的哈希:
def hash = Utils.stringToSHA1("${runWrapper.fullProjectName}\n${script.readFile("${dockerfilePath}")}")
def imgName = "${hash}"
然后它获取额外的参数并将它们添加到图像名称中:
def additionalBuildArgs = describable.getAdditionalBuildArgs() ? " ${describable.additionalBuildArgs}" : ""
script.sh "docker build -t ${imgName}${additionalBuildArgs} -f \"${dockerfilePath}\" \"${describable.getActualDir()}\""
因此,通过使用 dockerfile 步骤,名称似乎始终是哈希值。