清理用作 Jenkins 代理的 docker 镜像?

问题描述 投票:0回答:1

我在 Jenkins 中使用以下声明性管道:

pipeline {
    agent any
    stages {
        stage('Build Image'){
            steps {
                sh "docker build -t my_tag ${WORKSPACE} --pull"
            }
        }
        stage('Run Stuff In Docker'){
            agent {
                docker {
                    image "my_tag"
                    args '--rm -v /some_location:/some_location:rw'
                }
            }
            stages{
                // do stuff inside the container
            }
        }
        stage('Push Image'){
            steps {  
                sh "docker push my_tag"
            } 
        }
    }
    post {
        success {
            sh "docker rmi my_tag"
            successNotify()
        }
        failure {
            failureNotify()
        }
    }
}

我正在使用 docker 代理,在容器内运行一些测试,将图像推送到存储库,然后我想在完成所有操作后清理图像。但是,我不断收到以下错误:

来自守护程序的错误响应:冲突:无法删除存储库 参考“my_tag”(必须强制) - 容器 a4ed94a24dca 正在使用其 参考图片 181b303be4fe

我看到 Jenkins 正在使用

-d
运行代理,所以我的猜测是,即使我已经包含了
--rm
,在
post {success}
块运行之前容器也不会被删除。这里有自动清理代理镜像的好方法吗?

docker jenkins
1个回答
0
投票

您可以尝试

docker
全局变量及其
inside()
函数,一旦
inside()
函数完成即可启动容器并停止容器。

更多详细信息请参见此处

stage('Run Stuff In Docker'){
    steps {
        script {
            docker.image("my_tag").inside("-v /some_location:/some_location:rw") {
                // do stuff inside the container
                sh '''

                '''
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.