if 在 Jenkinsfile 上检查 docker 图像的条件
if condition for checking docker image on Jenkinsfile
我对 Jenkins 声明式管道还很陌生。在 Jenkinsfile 中,我想检查一个
具体 docker 图片是否已经在机器上。如果图像已经存在,那么它只是删除旧的然后构建新的,如果不是那么它只是构建新的。我怎样才能通过声明式管道达到这个目标?
如果你愿意帮忙,非常感谢
如果您已经在本地拥有映像,那么无论是构建映像还是从注册表中提取映像都非常便宜。如果您正在构建图像,Docker 的 layer caching 意味着 Docker 将扫描 Docker 文件并快速断定它已经有了最终图像;如果您从注册表中提取它,Docker 将联系注册表,获取层列表(小),并确定它已经拥有所有层。
这意味着可以无条件地 build/pull 您 CI 系统中的图像。如果没有工作要做,很快就会发生。
(相反,请注意,某些 Docker 映像实际上会定期更新;例如,ubuntu
基本映像每周重新发布一次,每个月都会更新安全补丁。所以有一些受益于 总是 在您的 CI 系统中拉取基本映像,因此您一定会获得这些更新。)
您可以使用 sh "docker rmi -f <ImageID>"
命令删除图像。
要找到 ImageID,您可以使用 docker 的 -qf
选项列出图像 ID。
参考范例如下:
stage('Remove old Image') {
steps {
script {
def imageName = "<Your image Name>"
env.imageName = "${imageName}"
def oldImageID = sh(
script: 'docker images -qf reference=${imageName}:${imageTag}',
returnStdout: true
)
echo "Image Name: " + "${imageName}"
echo "Old Image: ${oldImageID}"
if ( "${oldImageID}" != '' ) {
echo "Deleting image id: ${oldImageID}..."
sh "docker rmi -f ${oldImageID}"
} else {
echo "No image to delete..."
}
}
}
}
有关 docker 图片选项的信息,请访问:https://docs.docker.com/engine/reference/commandline/images/
我对 Jenkins 声明式管道还很陌生。在 Jenkinsfile 中,我想检查一个 具体 docker 图片是否已经在机器上。如果图像已经存在,那么它只是删除旧的然后构建新的,如果不是那么它只是构建新的。我怎样才能通过声明式管道达到这个目标?
如果你愿意帮忙,非常感谢
如果您已经在本地拥有映像,那么无论是构建映像还是从注册表中提取映像都非常便宜。如果您正在构建图像,Docker 的 layer caching 意味着 Docker 将扫描 Docker 文件并快速断定它已经有了最终图像;如果您从注册表中提取它,Docker 将联系注册表,获取层列表(小),并确定它已经拥有所有层。
这意味着可以无条件地 build/pull 您 CI 系统中的图像。如果没有工作要做,很快就会发生。
(相反,请注意,某些 Docker 映像实际上会定期更新;例如,ubuntu
基本映像每周重新发布一次,每个月都会更新安全补丁。所以有一些受益于 总是 在您的 CI 系统中拉取基本映像,因此您一定会获得这些更新。)
您可以使用 sh "docker rmi -f <ImageID>"
命令删除图像。
要找到 ImageID,您可以使用 docker 的 -qf
选项列出图像 ID。
参考范例如下:
stage('Remove old Image') {
steps {
script {
def imageName = "<Your image Name>"
env.imageName = "${imageName}"
def oldImageID = sh(
script: 'docker images -qf reference=${imageName}:${imageTag}',
returnStdout: true
)
echo "Image Name: " + "${imageName}"
echo "Old Image: ${oldImageID}"
if ( "${oldImageID}" != '' ) {
echo "Deleting image id: ${oldImageID}..."
sh "docker rmi -f ${oldImageID}"
} else {
echo "No image to delete..."
}
}
}
}
有关 docker 图片选项的信息,请访问:https://docs.docker.com/engine/reference/commandline/images/