2014-01-09 453 views
14

我在詹金斯工作。我们自己的触发器的网站通过REST API来构建这项工作。有时我们想中止构建。有时候,它可能在构建开始之前。在这种情况下,我们有queueItem#而不是build#。如何通过REST API停止Jenkins中的构建?

如何通过REST API来实现?

回答

21

如果构建已经开始,由POST上:

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

将停止/取消当前的版本。

如果构建还没有开始,你有queueItem,上然后POST

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

这是假设你的詹金斯服务器尚未固定,否则你需要添加BASIC authentication为用户提供取消特权。

+0

非常感谢您为您的用户回复。第一个命令运行良好。然而,第二个返回404。你有什么想法会出错吗?顺便说一下,你是否有指向该部分API的文档的指针,因为我找不到它。 – Barth

+0

我刚刚意识到,队列的命令确实会从队列中移除项目,但仍返回404。这很奇怪。 – Barth

+0

同意。不幸的是,Jenkins在这部分没有明确的文档。 404有线,虽然它取消了从队列构建。但是您可以使用“http:// /job///api”找到一些文档,并且您可以将“/ api”添加到很多url并获得显示其“REST API”的页面。 –

0

其实这个问题已经回答了。所以我会补充,如何找到id=<queueItem>,我一直在寻找这个解决方案,这将有助于他人。

所以,你可以得到<queueItem>,通过 - http://jenkins:8081/queue/api/json

样本输出将是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 
0

也许你想远程发送POST HTTP请求停止正在运行的构建,有一个线索仅供参考,詹金斯的工作可以停止其他作业(运行编译),像任何詹金斯管理员时单击X按钮工作正在运行。

  1. Http Request Plugins由詹金斯需要ver2.17
  2. 取消选中防止跨站请求伪造利用选项。詹金斯经理 - >配置全球安全 - >取消选中
  3. 设置Http请求插件的授权。詹金斯经理 - >配置系统 - > HTTP请求基本/摘要认证 - >添加。确保用户具有作业取消权限
  4. 作业A正在运行。在作业B,添加构建步骤为HTTP请求,网址:http://Jenkins_URL/job/Job_A_Name/lastBuild/stop,HTTP方式:POST,授权选择您刚才设置,然后再建工作B.

完成