我有一个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
精彩评论