10

我有一个带有输入提示的 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"
    }
}

我有一个 3rd 方应用程序,它从业务域用户中抽象出 Jenkins 的使用。我想要第三方应用程序中的一个按钮,当单击该按钮时,将批准构建以进行生产发布。

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

4

1 回答 1

18

免责声明:恕我直言,此功能记录不充分。我从一堆带有部分答案的 SO 问题和几篇博客文章中发现了大部分内容,而从实际的 Jenkins 文档中发现的很少。但是,它似乎在 Jenkins 2.73.2 上运行良好。

首先,我认为您需要idinput.

然后,您可以向其中之一发送 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带有 URL 编码的 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,而只需要继续/中止内置操作。

于 2018-05-30T13:40:08.493 回答