Удаленное выполнение заданий Hudson

#hudson

#хадсон

Вопрос:

Я пытаюсь автоматизировать Hudson, удаленно нажимая на соответствующие URL-адреса. Я использую urllib2 на python для выполнения того же самого.

Прежде всего, я пытаюсь создать существующее задание и получить статус сборки.

Пример URL-адреса для сборки будет выглядеть следующим образом:

http://tomcaturl:8080/hudson/job/.NET Build/build

Однако это возвращает мне HTML-данные.

В документах Hudson говорится, что я могу получать данные в формате python / json / xml, поэтому я пытаюсь нажать

http://tomcaturl:8080/hudson/job/.NET Build/build/api/json

Но я вообще не получаю никаких данных, хотя сборка выполняется успешно.

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

Пожалуйста, обратите внимание, что я делаю это через удаленную программу Python, и у меня нет доступа к графическому интерфейсу hudson.

Ответ №1:

Прежде всего, если у вас включена защита / вход, вы должны войти на удаленный сервер hudson для /job/JobName/build . Если вы разрешаете запускать сборку без входа в систему, это не проблема.

Запрос /job/JobName/build вернет HTML-данные. Если вы не вошли в систему, вы получите повторное перенаправление на страницу входа, и сборка не будет запущена. Если запрос выполнен успешно, вы не получите перенаправление на логин, и вы можете предположить, что сборка была поставлена в очередь. Вы также можете проверить очередь сборки, используя URL-адрес api проекта (см. Ниже). Обратите внимание, что перед началом сборки может быть задержка, которую вы можете контролировать, вызывая /job/JobName/build ?задержка = 0 секунд

API недоступен по URL-адресу job / JobName / build, но вы можете просмотреть информацию об api здесь:

http://tomcaturl:8080/hudson/job/.NET Build/api

Большинство страниц в hudson, на которых отображается информация (о проекте, конкретной сборке и так далее), имеют страницу api, если вы добавляете /api/xml или /api/json в конец URL. Причина /job/JobName/build не имеет страницы api просто потому, что это не URL-адрес информационной страницы.

Примеры запросов api:

запрос xml для получения информации о проекте:

http://tomcaturl:8080/hudson/job/.NET Build/api/xml

вызов json для получения информации о последней успешной сборке проекта:

http://tomcaturl:8080/hudson/job/.NET Build/lastSucessfulBuild/api/json

Комментарии:

1. И следующее просто предоставит вам информацию о последней сборке, даже если она не была успешной http://tomcaturl:8080/hudson/job/.NET Build/lastBuild/api/xml или http://tomcaturl:8080/hudson/job/.NET Build/lastBuild/api /…

2. Спасибо Андерсу и sdmythos_gr.

3. Любая идея о том, как я выполняю сопоставление, могу ли я заставить вызов build возвращать мне BUILD_ID / BUILD_TAG / BUILD_NUM, или сборки всегда запланированы.

4. Я не думаю, что вы получаете какую-либо информацию из запроса на сборку. Я думаю, вы узнаете, было ли оно успешным или нет, и вы можете просмотреть список сборок для задания и увидеть последнюю сборку, запущенную данным пользователем, вероятно, это начатая сборка. Я могу ошибаться, и в ответе есть что-то невидимое, что вы можете использовать, кроме просто «OK».

5. @sdmythos_gr возвращает номер последней сборки и некоторые данные, например, выполняется ли он, был ли он успешным или неудачным. Вы можете получить возврат определенного задания с помощью URL: tomcaturl:8080/hudson/job/.NET Build/ <число>/api/json , и вы можете получить вывод консоли с помощью get в URL: tomcaturl:8080/hudson/job/.NET Build/>/ …