В Jenkins есть возможность запускать задачи удаленно, через curl:
curl -X POST http://API_USER_ID:API_TOKEN@JENKINS_URL/job/JOB_NAME/build -H "CRUMB"
А вот как составить этот curl, мне помогла статья на stackoverflow, которая, в свою очередь, ссылается на оригинальный пост.
Хочу сохранить это решение:
Допустим, мы хотим запустить удаленно задачу под названием «Football».
Дженкинс у нас находится по адресу http://192.168.99.20:8080 и входим ты под пользователем admin.
Что нужно сделать?
curl -X POST http://API_USER_ID:API_TOKEN@JENKINS_URL/job/JOB_NAME/build -H "CRUMB"
А вот как составить этот curl, мне помогла статья на stackoverflow, которая, в свою очередь, ссылается на оригинальный пост.
Хочу сохранить это решение:
Допустим, мы хотим запустить удаленно задачу под названием «Football».
Дженкинс у нас находится по адресу http://192.168.99.20:8080 и входим ты под пользователем admin.
Что нужно сделать?
1. Создать задачу
1. «Создать Item» (да, в русифицированной версии это так называется)
Со свободной конфигурацией, назвать «Football».
Хочу заметить, что, если вы собираетесь вызывать джобу через curl, лучше не использовать пробел в ее названии. А то потом огребете проблем там, где не ждали. Это имхо, но лучше использовать CamelCase или snake_case.
См также:
2. Настроить ее — например, пусть она вызывает shell команду
newman run https://www.getpostman.com/collections/c2eb72db4c1191c3d36d
Это, конечно, необязательный пункт, но какой смысл запускать "пустую" задачу?
3. В оригинальном посте еще советуют в в блоке «Триггеры сборки» поставить галочку «Trigger builds remotely (e.g., from scripts)»
Увидеть подсказку:
Use the following URL to trigger build remotely: JENKINS_URL/job/Football/build?token=TOKEN_NAME or /buildWithParameters?token=TOKEN_NAME
Optionally append &cause=Cause+Text to provide text that will be included in the recorded build cause.
Восхититься ею и убрать галочку. Честно говоря, я не поняла смысла этого. Потому что мы составляем запрос все равно немного по-другому, используя crumb. Когда я пыталась отправить запрос как в этой подсказке, он не сработал. Тогда в чем ее смысл?
В общем, если не выполнять этот пункт, все будет работать — проверено. Просто создайте задачу и можно сразу пулять ее через curl.
2. Получить API Token
1. Кликнуть на имя пользователя в правом верхнем углу страницы
2. Нажать «Настроить»
3. В разделе «API Token» нажать «Создать новый токен». Дать ему имя и потом сохранить куда-нибудь выданное сервером значение.
4. Выпишите себе в блокнот через двоеточие "User ID" and "API Token", так вы будете использовать их в запросе. Например, admin:85703fb68927f04968630e192e4927cb
3. Получить crumb
Для этого надо вызвать запрос:
wget -q --auth-no-challenge --user admin --password admin --output-document - 'http://192.168.99.20:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)'
Подставив свои данные:
- логин/пароль для входа в систему (это не API-токен, это как вы заходите через GUI) — в примере это admin/admin
- URL — в примере 192.168.99.20:8080.
Этот запрос вернет вам что-то типа Jenkins-Crumb:44e7033af70da95a47403c3bed5c10f8
Если эту информацию не передать в curl, то огребете ошибку
HTTP/1.1 403 Forbidden
или Error 403 No valid crumb was included in the request
.Внимание! Если вы работаете на Windows, то wget нужно вызывать из программы cygwin, которая позволяет в винде работать линукс-командами. Если вызвать wget из простой консоли винды, он вернет пустоту (даже на верный запрос).
4. Проверить!
Теперь у нас есть вся информация! Напомню запрос, который нам надо послать:
curl -X POST http://API_USER_ID:API_TOKEN@JENKINS_URL/job/JOB_NAME/build -H "CRUMB"
Что мы туда подставляем:
- API_USER_ID:API_TOKEN — имя пользователя (под которым вы логинитесь в GUI) + его API токен. Мы сохранили эту информацию в пункте 2
- JENKINS_URL — ну тут все просто, мы и без настроек его знаем
- JOB_NAME — имя свежесозданной задачи
- CRUMB — то, что вернул нам wget в пункте 3
Если все ок, то запрос вернет нам статус 201 Created:
curl -I -X POST http://admin:85703fb68927f04968630e192e4927cb@192.168.99.20:8080/job/Football/build -H "Jenkins-Crumb:44e7033af70da95a47403c3bed5c10f8"
HTTP/1.1 201 Created
Date: Fri, 02 Jun 2017 06:17:51 GMT
X-Content-Type-Options: nosniff
Location: http://192.168.99.20:8080/queue/item/17/
Content-Length: 0
Server: Jetty(9.2.z-SNAPSHOT)
Проверяем в графическом интерфейсе — ура, сборка правда вызвана успешно!
Еще раз напомню источники — статья на stackoverflow, которая, в свою очередь, ссылается на оригинальный пост.
Комментариев нет:
Отправить комментарий