jenkins脚本化Pipeline阶段不等待其命令完成执行

时间:2019-06-04 08:05:00

标签: jenkins jenkins-pipeline

我写了一个詹金斯脚本化管道,其中包含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”。

1 个答案:

答案 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'
}