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

我有一个Jenkinspipe道构build和运行Docker机器,而不是作为代理,但是使用脚本块以及Dockerpipe道插件方法docker.build()Image.run() 。 这工作正常,但如果构build失败,泊坞窗容器仍在运行! 我目前有一个post{ always{} }块中的Container.stop() ,但它似乎不工作。 我不想让我的Jenkins服务器在每次构build后删除容器,我不能离开它,因为它有一个特定的和必要的名称。 无论构build失败,我如何停止和rm容器?

我的pipe道:

 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') } } } 

这是一个工作解决scheme。 您只需为主pipe道的容器定义一个variables即可。 然后,您可以在pipe道中的任何地方使用它来启动或停止容器。 特别是,您可以在post{ always{ } }删除容器。

 def receiver_container pipeline { agent any 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 receiver_docker") receiver_container = receiver.run("-d -u 0:0 -v /var/lib/jenkins/workspace/RsyncRealtime/jenkins_rt:/DSK1/SSN/LOG5_F/17191 --network='rsync_test' --name='test_receiver'") } } } stage('Run Unit Tests') { agent { dockerfile { args '-u 0:0 -v /etc/passwd:/etc/passwd --network="rsync_test"' } } steps { sh "sshpass -p 'test' ssh anonymous@test_receiver ls -l /DSK1/SSN/LOG5_F/17191" sh "python ./rsyncUnitTests.py" } } } post { always { script { receiver_container.stop() } } failure { sendEmail('foo@bar.com') } changed { sendEmail('foo@bar.com') } } }