首页 > 解决方案 > 如何在 Jenkins 声明式管道中删除 docker 代理的图像?

问题描述

我正在使用自定义映像作为 Docker 代理运行 Jenkins 的 CI/CD 管道。在某些时候,我修改了 dockerfile(我只是在容器内添加了 curl,但这应该在问题中起到边缘作用)。

现在,当我再次运行构建时,在其他包中找不到 curl,我相信这是因为 Jenkins 将旧图像保存在内存中并且没有从我的新版本中构建容器码头文件。因此,我正在尝试将图像作为发布操作删除:

pipeline {

    agent {
        docker {
            image 'my-personal-image'
            registryUrl 'my-custom-registry'
            args '-v ${WORKSPACE}:/usr/jenkins --rm=true'
        }
    }

    stages {
        ...
    }
    post{
        failure{
            sh "docker rmi -f my-personal-image"
        }
        cleanup{
            cleanWs()
        }
    }
}

当然,这会失败,因为 sh 正在 docker 容器内传递命令。

+ docker rmi -f my-personal-image
/srv/jenkins/workspace/build@tmp/durable-cfcfebd7/script.sh:
1: /srv/jenkins/workspace/build@tmp/durable-cfcfebd7/script.sh:
docker: not found

我想知道是否有办法在构建结束时删除图像?

PS。我通过转移到脚本管道或在开始时使用“代理无”并稍后在变量中引用图像来找到其他方法。然而,我仍然不满意,我不能不重复使用脚本管道(它工作顺利!),也没有在 Jenkinsfile 稍后在某个阶段级别指定 docker 代理

标签: dockerjenkinsjenkins-pipelinepipelineagent

解决方案


推荐阅读