2017-02-16 172 views
0

我試圖從我公司的機器觸發詹金斯工作,然後返回,如果是成功或不成功。目前,我可以通過我創建的URL(隱私屏蔽)來觸發作業,所以我覺得URL好像正確,參數正確傳遞,並且它們顯示在作業的控制檯輸出中,以及所有內容在那裏沒問題。但是,我想知道構建是否成功。如何在觸發遠程構建後從Jenkins獲得響應

從我看到的大多數例子中,jenkins的狀態代碼表示成功(201)。但是,我從來沒有收到任何回調函數。有任何想法嗎?

function onButtonClick() 
{ 
    var JenkinsURL = "http://mycompany:8080/view/project/job/jobname/buildWithParameters?token=TokenHere"; 

    var params = new Object(); 
    params.Data1 = "Data"; 
    params.Data2 = ""; 
    for (var i = 0; i < list.length; i++) { 
     params.Data2 += list[i]; 
    } 

    $.ajax(
    { 
     url: JenkinsURL, 
     method: 'POST', 
     data: params, 
     dataType: 'json', 
     success: RebootCallback, 
     fail: RebootCallback, 
    } 
    ); 
} 

function RebootCallback(result) 
{ 
    alert(result); 
} 

回答

3

觸發,像這樣的API構建只是排入構建,等待執行。因此,API調用立即返回,無需等待構建啓動或完成(這可能不會發生)。

但對您的請求的響應將包含一個Location HTTP標頭,指向新創建的隊列項目。例如:

HTTP/1.1 201 Created 
Location: http://localhost:8080/queue/item/16/ 

檢查該資源的API URL(即附加任一api/jsonapi/xml到URL)將返回關於排隊項目的信息。

如果構建仍在隊列中,您將看到why原因(例如等待可用代理),但是如果構建已啓動,您將看到指向構建的executable.url字段。例如,對於構建的API的JSON開始:

{ 
    … 
    "url": "queue/item/16/", 
    "executable": { 
    "_class": "org.jenkinsci.plugins.workflow.job.WorkflowRun", 
    "number": 16, 
    "url": "http://localhost:8080/job/test/4/" 
    } 
    … 
} 

如果您取得用於該構建#4中的API URL,你將能夠檢查其result場拿到構建結果。

+0

啊,這是有道理的,它不會立即執行。您說對我的請求的回覆包含一個位置,但這是我的問題,我沒有收到任何回覆。發佈的代碼是否有問題會導致未收到回覆? –

+0

我不知道Javascript的細節。但是這個站點的一些快速搜索提到了jQuery auto-following重定向(儘管我猜這不應該發生在201響應中),並且CORS頭部是必需的,如果這個Javascript沒有與Jenkins服務器運行在同一個源。 –