运维开发网

使用Docker Pipeline插件时,在Jenkins中停止和删除docker容器的正确方法是什么?

运维开发网 https://www.qedev.com 2020-07-05 16:25 出处:网络 作者:运维开发网整理
我有一个Jenkins管道,用于构建和运行Docker机器,而不是代理,但使用脚本块以及Docker Pipeline Plugin方法docker.build()和 Image.run().这工作正常,但如果构建失败,docker容器将继续运行!我目前在帖子{always {}}块中有Container.stop(),但它似乎不起作用.我不希望ssh进入我的Jenkins服务器以在每次构建后删除
我有一个Jenkins管道,用于构建和运行Docker机器,而不是代理,但使用脚本块以及Docker Pipeline Plugin方法docker.build()和 Image.run().这工作正常,但如果构建失败,Docker容器将继续运行!我目前在帖子{always {}}块中有Container.stop(),但它似乎不起作用.我不希望ssh进入我的Jenkins服务器以在每次构建后删除容器,我不能保留它,因为它具有特定和必要的名称.无论构建失败,我如何停止和移动容器?

我的管道:

pipeline {
    agent none
    stages {
        stage('Checkout') {
            agent any
            steps {
                checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '<some credentials>', url: '<a git repo>']]])
            }
        }
        stage('Spin Up Receiver') {
            agent any
            steps {
                script { 
                    def receiver = docker.build("receiver",  "--rm centos7_receiver")
                    def receiver_container = receiver.run("-d -v ${PWD}/realtime_files/station_name/201707/f/20170710_191:/DSK1/SSN/LOG0_f/17001 --network='rsync_test' --name='test_receiver'")
                }
            }
        }
        stage('Run Tests') {
            agent { dockerfile { args '-v /etc/passwd:/etc/passwd --network="rsync_test"' } }
            steps {
                sh "python ./rsyncUnitTests.py"
            }
        }
    }
    post {
        always {
            script { 
                receiver_container.stop()
            }
        }
        failure {
            sendEmail('foo@bar.com')
        }
        changed {
            sendEmail('foo@bar.com')
        }
    }
}
您可以使用Image.withRun()而不是Image.run().

Image.withRun[(args[, command])] {…}

Like run but stops the container as soon as its body exits, so you do not need a try-finally block.

其他有用的命令:

https://qa.nuxeo.org/jenkins/pipeline-syntax/globals#docker

0

精彩评论

暂无评论...
验证码 换一张
取 消