如何在Jenkins管道构建完成后保留docker容器



我们有一个Jenkins管道,它在docker容器上运行,并在tomcat中部署应用程序,但一旦管道构建完成,docker容器就会被破坏,因此我们无法访问已安装的应用程序-

有没有一种方法可以在构建完成后保留通过Jenkins管道启动的docker容器。

管道样本代码:

pipeline {
agent {
docker {
label '<label-name>'
image '<image-name>'
args '--cap-add SYS_ADMIN --cap-add DAC_READ_SEARCH -v $HOME/mavenrepo/module/repository:/usr/share/.m2/repository --user root --memory=9g'
}
}
stages {
//Few required stages here
stage('Start Application server'){
steps{
script{
FAILED_STAGE = env.STAGE_NAME
//startApplicationServer()
//checkServerStarted()
}
}
}
}
}

在管道构建结束时,可以看到容器销毁代码-

$ docker stop --time=1 b8445c83d7c9d08231c27f4f03f486d021fa1c0fa1d89c189231b069a2fbbf
$ docker rm -f b8445c83d7c9d08231c27f4f03f486d021fa1c0fa1d89c189231b069a2fbbf
[Pipeline] // withDockerContainer
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

我的解决方案:在管道中,与新创建的容器共享套接字

pipeline {
agent {
docker {
image 'ubuntu'
args '-v /var/run/docker.sock:/var/run/docker.sock'
}
}

然后,在作业中,从您正在运行的映像创建一个新映像:

docker commit $(basename $(cat /proc/1/cpuset)) foo 

$(basename$(cat/proc/1/cpuset((获取当前容器的哈希值[此处][1]

foo是新图像的名称

最新更新