我写了一个詹金斯脚本化管道,其中包含3个阶段。在每个阶段,我都会调用curl命令来启动远程服务器上的jenkins作业。但是,问题是在第一阶段完成执行之前,第二阶段正在执行。 请帮我如何解决这个问题?
node{
properties([
disableConcurrentBuilds()
])
stage('stage1'){
sh 'curl -X POST -H "Content-Type: application/json" -d "{ "tagname": "$tagname" }" -vs http://pkg.rtbrick.com:8080/generic-webhook-trigger/invoke?token=qwerty'
}
stage('stage2'){
sh 'curl -X POST -H "Content-Type: application/json" -d "{ "tagname": "$tagname" }" -vs http://image.rtbrick.com:8080/generic-webhook-trigger/invoke?token=1234'
}
stage('stage3'){
sh 'curl -X POST -H "Content-Type: application/json" -d "{ "tagname": "$tagname" }" -vs http://image.rtbrick.com:8080/generic-webhook-trigger/invoke?token=1804'}
}
}
只有在“ stage1”完成后才能启动“ Stage2”。
答案 0 :(得分:1)
使用Jenkins REST API和waitUntil
步骤与timeout
结合使用是可行的(没有超时可能会永远挂起):
def response
timeout(30) {
waitUntil {
response = sh(
script: 'curl http://pkg.rtbrick.com:8080/view/job/my-job/lastBuild/api/json | grep "\"result\":\"SUCCESS\""',
returnStatus: true
)
return (response == 0)
}
}
if (response != 0) {
build.result = 'ERROR'
}