首页 > 解决方案 > 无法通过 Jenkins 管道删除 docker 映像

问题描述

我想从以前的版本中删除图像。我能够获得它的图像 ID,但是每次点击docker rmi命令时工作都会死掉。

stage('Clean old Image') {
            steps {
                script { 
                    def imageName = "${registry}" + "/" + "${branchName}"
                    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..."
                        } 
                    }  
                }
            }

阶段日志控制台显示这些错误消息

Shell Script -- docker rmi -f $oldImageID (self time 282ms)
+ docker rmi -f
"docker rmi" requires at least 1 argument.
See 'docker rmi --help'.

Usage:  docker rmi [OPTIONS] IMAGE [IMAGE...]

Remove one or more images

但实际上,图像 id 已经存在,因为它在阶段日志中显示

Print Message -- Old Image: 267848fadb74 (self time 11ms)
Old Image: 267848fadb74

标签: dockerjenkinsjenkins-pipeline

解决方案


尝试传入" 而不是'with${oldImageID}

 sh "docker rmi -f ${oldImageID}"

推荐阅读