4
我有一個Jenkins管道,可以構建並運行Docker機器,而不是作爲代理,但使用腳本塊以及Docker管道插件方法docker.build()
和Image.run()
。這工作正常,但如果構建失敗,碼頭集裝箱仍在運行!我目前在post{ always{} }
塊中有Container.stop()
,但似乎不起作用。我不希望ssh進入我的Jenkins服務器,以便在每次構建後刪除容器,我不能只留下它,因爲它有一個特定的名稱。 無論構建失敗,我如何停止和rm容器?使用Docker Pipeline Plugin時,在Jenkins停止和移除Docker容器的正確方法是什麼?
我的管道:
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('[email protected]')
}
changed {
sendEmail('[email protected]')
}
}
}
我發現了答案。您必須爲'pipeline'的docker機器_outside_聲明變量('def receiver_container')。然後,您可以從管道中的任何位置調用它,並且會被識別。 – medley56
你能否提供你的解決方案作爲你自己問題的答案? –