使用Jenkins REST API恢复暂停的管道?

时间:2018-02-15 03:11:21

标签: jenkins jenkins-pipeline jenkins-blueocean

我有一个带输入提示的Jenkins声明性管道。

stage('Approval') {
    when { 
        branch "qa"
    }
    input {
        message "Approve release?"
        ok "Yes"
        parameters {
            string(name: 'IS_APPROVED', defaultValue: 'Yes', description: 'Approve?')
        }
    }
    steps {
        echo "Commit to master"
    }
}

我有一个第三方应用程序,它从业务领域用户中抽象出Jenkins的使用。我想要第三方应用程序中的一个按钮,当点击它时,将批准生产版本的构建。

我是否可以调用Jenkins REST API为舞台提供输入参数并恢复构建。

1 个答案:

答案 0 :(得分:6)

免责声明:恕我直言,此功能记录不足。我从一堆SO问题中得到了大部分答案,其中包含部分答案和一些博客文章,而实际的Jenkins文档则很少。但是,它似乎在Jenkins 2.73.2上运行良好。

首先,我认为您需要为id添加input属性。

然后,您可以向其中一个发送POST请求:

  • http://yourjenkins/job/${YOUR_PROJECT}/${BUILD_NUMBER}/input/${INPUT_ID}/abort

    这将取消您的工作并忽略任何参数。

  • http://yourjenkins/job/${YOUR_PROJECT}/${BUILD_NUMBER}/input/${INPUT_ID}/proceedEmpty

    这将恢复您的工作并忽略任何参数。

  • http://yourjenkins/job/${YOUR_PROJECT}/${BUILD_NUMBER}/input/${INPUT_ID}/submit

    这将恢复您的工作,您可以发送参数。但是:

    1. 您需要使用“继续”按钮的标题发送proceed参数。
    2. 您需要使用格式为json的网址编码JSON文档发送{"parameter":[{"name":"param1","value":"valueOfParam1"},{"name":"param2","value":"valueOfParam2"}]}参数,这些参数将是您的实际输入参数。
    3. 如果您未能发送有效的json参数,则无论如何您的工作仍将继续,它将不会获得任何参数。
    4. 成功时,这将返回'302 Found'并重定向到用户界面,这可能会干扰您的代码和/或导致错误处理问题。
  • http://yourjenkins/job/${YOUR_PROJECT}/${BUILD_NUMBER}/wfapi/inputSubmit

    这似乎是正确的方法。您需要发送inputIdjson(请参阅上一点)。成功时,这将返回“200 OK”,空响应。您还可以在已暂停的作业中查看/wfapi/wfapi/nextPendingInputAction以获取更多信息。

请记住,您需要为每个请求发送身份验证凭据和CSRF令牌。此外,对于您描述的用例,您可能不需要input的参数,只需要继续/中止内置操作。