2013-01-02 99 views
3

http://localhost/jenkins/job/job_name/25/api/json如何返回JSON對象的構建26的細節相似,有沒有辦法在首次啓動作業時獲得類似的對象,即在您之前知道內部編號是什麼?如何從Jenkins構建請求返回JSON對象

我注意到curl對構建url的POST請求的輸出返回html,它包含一個內部版本號;然而,我寧願不需要解析這個,而是傾向於使用內部版本號的JSON對象。目前,我使用:

curl -v --data "param1=value&param2=value" \ 
http://localhost/jenkins/job/job_name/buildWithParameters 

從而開始作業精細,輸出一堆html。有沒有辦法開始這個工作,並收到編號爲JSON的對象?

回答

1

如果查詢http://localhost/jenkins/job/job_name/api/json可以獲取nextBuildNumber場隨時會給你的下一個版本號。

當你觸發一個構建,你可以放心的構建將得到完全此號碼。

+0

這就是我一直在尋找。不過,有一件事,你知道是否有排隊等待構建?如果構建37現在正在進行,並且我發佈了第二個構建,那麼儘管38由構建的隊列構建,「nextBuildNumber」仍然會返回38。一旦排隊構建開始,它只會更新到39。我想我可以在我的結尾解釋一些如何。 – markj

+0

不在我的頭上。你也可以檢查'queueItem',但是它沒有內部編號..現在不確定,需要運行一些測試。 – favoretti

+1

如果你運行'curl .../job_name/api/json | python -mjson.tool'你可以通過這種方式得到一個readabale json輸出。 – favoretti

1

一旦構建被觸發,你可以從它的網址後面:

http://localhost/jenkins/job/job_name/api/json?tree=lastBuild[url] 

這將返回運行構建,如果有一個,或以其他方式最新完成的版本。然後,您可以將「/ api/json」添加到該URL以獲取您構建的JSON對象。

+0

如果構建被阻止並且正在等待啓動,則這不會返回任何內容。或者,假設它會返回最後一次構建,但它不是OP想要的一個:) – favoretti

5

的nextBuildNumber可能不是在所有情況下正確的版本號。如果您觸發了同一個Job的兩個不同版本,我們不知道哪個版本首先被觸發。這裏有一個競賽條件。檢查生成隊列可能不會給出正確的內部版本號。

0

我的方案,我需要一個JSONP數據類型去。我所做的就是從Jenkins那裏得到我的特定工作的原始對象,以便我可以根據需要操縱它。

請求:

$.ajax({ 
    url: "http://<jenkins server>/job/<job name>/api/json?jsonp=?", 
    dataType: 'jsonp', 
    success: success 
}); 

成功的呼叫:

var success = function(json) { 

console.log('Raw JSON object for this job:'); 
console.log(json);  
} 

然後,讓你需要的信息,如:

console.log(json.lastCompletedBuild.number); 
console.log(json.lastBuild.url);