2014-01-09 452 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.

完成