it-roy-ru.com

Как остановить сборку в Jenkins через REST API?

У меня есть работа в Дженкинс. Веб-сайт наших собственных триггерных сборок этой работы через API REST. Иногда мы хотим прервать сборку. Иногда это может быть еще до того, как начнется сборка. В таких случаях у нас есть queueItem # вместо build #. 

Как это сделать через API REST?

16
Barth

Если сборка началась, с помощью POST on:

http://<Jenkins_URL>/job/<Job_Name>/<Build_Number>/stop

Остановит/отменит текущую сборку.

Если сборка еще не началась, у вас есть queueItem, а затем POST:

http://<Jenkins_URL>/queue/cancelItem?id=<queueItem>

Это предполагает, что ваш сервер Jenkins не был защищен, в противном случае вам нужно добавить ОСНОВНУЮ аутентификацию для пользователя с привилегиями Cancel

25
Jifeng Zhang

На самом деле на этот вопрос уже дан ответ. Поэтому я добавлю, как найти 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
2
Abhishek Kumar

Может быть, вы хотите удаленно отправить HTTP-запрос после остановки, чтобы остановить текущую сборку, есть подсказка, что задание jenkins может остановить другое задание (запуск сборки), как любой администратор jenkins нажимает кнопку X, когда задание выполняется. 

  1. Http Request Plugins требуется Jenkins ver2.17
  2. Снимите флажок «Предотвращать подделки межсайтовых запросов». Manager Jenkins -> Настроить глобальную безопасность -> Снять отметку
  3. Настройка авторизации Http Request Plugins. Диспетчер Jenkins -> Настроить систему -> HTTP-запрос Basic/Digest Authentication -> add. Убедитесь, что у пользователя есть разрешение на отмену задания
  4. Работа А выполняется. В задании B добавьте шаг сборки как HTTP-запрос, URL-адрес: http: // Jenkins_URL/job/Job_A_Name/lastBuild/stop , режим HTTP: POST, авторизация, выберите пользователя, которого вы только что установили, затем создайте задание B.

Готово

1
David Wang

Если вам нужно только отменить активную сборку из определенного задания, вы можете использовать этот пакетный скрипт (синтаксис 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

Необходимо указать путь к вашему локальному керлу

1
rawdesk.be