med*_*y56 6 jenkins-plugins docker jenkins-pipeline
我有一个Jenkins管道,它构建和运行Docker机器,而不是作为代理,但使用脚本块以及Docker Pipeline Plugin方法docker.build()
和Image.run()
.这工作正常,但如果构建失败,docker容器将继续运行!我目前Container.stop()
在一个post{ always{} }
街区,但它似乎没有工作.我不希望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')
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个有效的解决方案。您只需为主管道外的容器定义一个变量。然后你可以在管道的任何地方使用它来启动或停止容器。特别是,您可以在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')
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5214 次 |
最近记录: |