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

Lea*_*ner 6 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"
    }
}
Run Code Online (Sandbox Code Playgroud)

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

是否有一个Jenkins REST API,我可以调用它来为舞台提供输入参数并恢复构建.

小智 10

免责声明:恕我直言,此功能记录不足.我从一堆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使用带有表单的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,只需要继续/中止内置操作.