【问题标题】:How to retain docker container after Jenkins pipeline build completedJenkins管道构建完成后如何保留docker容器
【发布时间】:2022-01-16 00:34:08
【问题描述】:

我们有一个 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

【问题讨论】:

  • 您需要在管道期间将生成的工件从构建发布到存储库。

标签: docker jenkins jenkins-pipeline jenkins-groovy


【解决方案1】:

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

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 是新图像的名称

【讨论】:

    猜你喜欢
    • 2018-03-27
    • 2021-09-02
    • 2020-07-19
    • 2019-11-15
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    相关资源
    最近更新 更多