Как отключить работу Дженкинса через завиток?

Я хочу отключить задание Дженкинса, отправив сообщение об отказе от должности в 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

Убедитесь, что пользователь имеет доступ к этому.