如何通过REST API停止Jenkins的构建?

时间:2014-01-09 13:42:09

标签: api rest jenkins

我在詹金斯有一份工作。我们自己的网站通过REST api触发了这项工作的构建。有时我们想要中止构建。有时,它可能在构建开始之前。在这种情况下,我们有queueItem#而不是build#。

如何通过REST API进行此操作?

4 个答案:

答案 0 :(得分:27)

如果构建已经开始,请POST开启:

http://<Jenkins_URL>/job/<Job_Name>/<Build_Number>/stop

将停止/取消当前版本。

如果构建尚未开始,您可以使用queueItem,然后POST

http://<Jenkins_URL>/queue/cancelItem?id=<queueItem>

这假设您的Jenkins服务器尚未受到保护,否则您需要为具有取消权限的用户添加BASIC authentication

答案 1 :(得分:2)

实际上这个问题已经回答了。所以我要补充一下,如何找到id=<queueItem>,我找不到这个问题,这对其他人有帮助。

因此,您可以通过 - http://jenkins:8081/queue/api/json

获取<queueItem>

示例输出将是像这样的json类型 -

[{"_class":"hudson.model.Cause$RemoteCause","shortDescription":"Started by remote host 172.18.0.2","addr":"172.18.0.2","note":null}]}],"blocked":false,"buildable":false,"id":117,"inQueueSince":16767552,"params":"\nakey\t=AKIQ\nskey=1bP0RuNkr19vGze/bcb4ijDqVr8o\nnameofr=us\noutputtype=json\noid=284102\nadminname=admin","stuck":false,"task"

你必须采取"id":117,并将其解析为 - queueItem =117

http://<Jenkins_URL>/queue/cancelItem?id=queueItem

答案 2 :(得分:1)

也许你想远程发送一个post http请求来停止正在运行的构建,有一个线索FYI,jenkins作业可以停止另一个作业(运行构建),就像任何jenkins管理员在作业运行时单击X按钮一样。

    Jenkins ver2.17 需要
  1. Http Request Plugins
  2. 取消选中“阻止跨站点请求伪造攻击”选项。经理詹金斯 - &gt;配置全局安全性 - &gt;取消选中
  3. 设置Http请求插件的授权。经理詹金斯 - &gt;配置系统 - &gt; HTTP请求基本/摘要认证 - &gt;加。确保用户具有作业取消权限
  4. 作业A正在运行。在作业B中,将构建步骤添加为HTTP请求,URL:http://Jenkins_URL/job/Job_A_Name/lastBuild/stop,HTTP模式:POST,授权选择您刚刚设置的用户,然后构建作业B.
  5. 完成

答案 3 :(得分:1)

如果您只需要从某个作业中取消活动版本,则可以使用此批处理脚本(Windows .bat语法):

REM @Echo off
CLS
REM CANCEL ACTIVE BUILD
REM PARAMETER 1 ACTIVE JOB NAME
if [%1] == [] GOTO NO_ARGUMENT
SET domain=https://my.jenkins.com/job/
SET path=/lastBuild/stop
SET url=%domain%%1%path%
"\Program Files\Git\mingw64\bin\curl.exe" -X POST %url% --user user:pass"
GOTO THEEND
:NO_ARGUMENT
Echo You need to pass the active jobname to cancel last build execution
:THEEND

需要设置本地curl的路径。