2017-02-16 12 views
0

Я пытаюсь запустить работу jenkins с машины моей компании, а затем вернуться, если это было успешным или нет. В настоящее время я могу запускать задание с помощью URL-адреса, который я создаю (маскируется для конфиденциальности), поэтому я чувствую, что URL-адрес правильный и параметры передаются правильно, а также отображаются в Консоли Вывод задания и всего хорошо. Однако я хотел бы знать, была ли сборка успешной или нет.Как получить ответ от 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 немедленно возвращается, не дожидаясь начала сборки или завершения (возможно, этого не произойдет).

Но ответ на ваш запрос будет содержать HTTP-заголовок Location, указывающий на вновь созданный элемент очереди. Например:

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

Проверка API URL этого ресурса (то есть добавление либо api/json или api/xml к URL) будет возвращать информацию об очереди пункта.

Если сборка все еще находится в очереди, вы увидите причину why (например, ожидающий доступного агента), но если сборка была запущена, вы увидите поле , указывающее на сборку. Например, API JSON для сборки, которая начала:

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

Если вы принести URL API для этой сборки # 4, вы сможете проверить его result поле, чтобы получить результат сборки.

+0

О, это имеет смысл, что он не выполняется немедленно. Вы говорите, что ответ на мой запрос содержит место, но это моя проблема, я вообще не получаю ответа. Есть ли проблема с отправленным кодом, который не приведет к получению ответа? –

+0

Я не знаю о специфике Javascript. Но некоторые быстрые поиски на этом сайте указывают на автоматические переадресации jQuery (хотя я думаю, что это не должно произойти для ответа 201) и требуются заголовки CORS, если этот Javascript не работает на том же самом происхождении, что и ваш сервер Jenkins. –