Как отключить работу Дженкинса через завиток?
Я хочу отключить задание Дженкинса, отправив сообщение об отказе от должности в Jenkins.
Я пробовал это, используя:
-
curl -X POST http://<server>:8080/<jobname>/disable
-
curl -X POST http://<server>:8080/<jobname>/disable?token=<token>
-
curl -u <username>:<token> POST http://<server>:8080/<jobname>/disable
но с ошибкой каждый раз. Ошибка, которую я получаю:
403 в запрос не было включено ни одной крохи
Есть ли хорошее решение для этой проблемы?
Ответы
Ответ 1
Ошибка крошки означает, что вы используете CSRF Protection. Вы должны включить правильный заголовок крошки в свой запрос. Крошку можно получить из Jenkins API, как описано на странице Wiki Jenkins, приведенной выше. Ответ для "Триггер-параметризованная сборка с завиванием и крошкой" показывает синтаксис добавления заголовка крошки в запрос на завивание.
Ответ 2
Никакая действительная крошка означает, что у вашего Jenkins включена опция безопасности, которая предотвращает отправку сообщений стандартным способом, чтобы избежать однократных атак. Вы не можете использовать CLI Jenkins, потому что он еще не работает.
Ниже приведены шаги с использованием curl
(замените localhost
на ваш адрес Jenkins):
- Обратите внимание на свой пользовательский токен API (от
/user/USER/configure
).
-
Получите свою крошку:
CRUMB=$(curl -s 'http://USER:[email protected]:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')
-
Теперь вы можете отключить задание, отправив крошку в заголовки:
curl -X POST -H "$CRUMB" http://USER:[email protected]:8080/<jobname>/disable
Если выше по какой-то причине работать не будет, попробуйте вместо этого использовать -u USER:TOKEN
.
Ответ 3
настроить jenkins "глобальные параметры безопасности": Снимите флажок "Предотвратить подделки подпрограмм подпрограммы"
Ответ 4
Я нашел, что первая часть решения kenorb работала для меня, т.е. получала крошку, но для второй части завиток не понравился этот синтаксис, он сказал:
curl: (6) Не удалось разрешить хост 'http:'
Поэтому мне пришлось использовать следующий синтаксис, который работал:
curl -H $CRUMB http://localhost:8080/<jobname>/disable -u USER:TOKEN
Ответ 5
Ниже для меня работает
curl -X POST http://<servername>/job/jobname/disable
Убедитесь, что пользователь имеет доступ к этому.