【发布时间】:2014-01-09 13:42:09
【问题描述】:
我在 Jenkins 有一份工作。我们自己的网站通过 REST api 触发了这项工作的构建。有时我们想中止构建。有时,它甚至可以在构建开始之前。在这种情况下,我们使用 queueItem # 而不是 build #。
如何通过 REST api 做到这一点?
【问题讨论】:
我在 Jenkins 有一份工作。我们自己的网站通过 REST api 触发了这项工作的构建。有时我们想中止构建。有时,它甚至可以在构建开始之前。在这种情况下,我们使用 queueItem # 而不是 build #。
如何通过 REST api 做到这一点?
【问题讨论】:
如果构建已经开始,POST on:
http://<Jenkins_URL>/job/<Job_Name>/<Build_Number>/stop
将停止/取消当前构建。
如果构建还没有开始,你有queueItem,然后POST:
http://<Jenkins_URL>/queue/cancelItem?id=<queueItem>
这是假设您的 Jenkins 服务器没有受到保护,否则您需要为具有 Cancel 权限的用户添加 BASIC authentication。
【讨论】:
POST,包括 stop。
token 仅适用于build(以及buildWithParameters 和poll)。它不能用于任何其他 REST API。一般来说,您应该使用带有 API 令牌的 BASIC 身份验证。
build,不能用于stop 或cancelItem。我刚刚尝试了stop 与token 参数,但重定向到登录URL,表明令牌无效。
其实这个问题已经回答了。所以我会补充一下,如何找到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
【讨论】:
也许您想远程发送一个 post http 请求来停止正在运行的构建,有一个线索仅供参考,jenkins 作业可以停止另一个作业(正在运行的构建),就像任何 jenkins 管理员在作业运行时单击 X 按钮一样。
完成
【讨论】:
如果您只需要取消某个作业的活动构建,您可以使用此批处理脚本(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 的路径。
【讨论】: