我在 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
全局变量及其 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 '''
'''
}
}
}
}