Ответ 1
Чтобы устранить эту проблему, я снял флажок "Предотвратить подделки Cross Site Request Forgery" в разделе jenkins.com/configureSecurity и начал работать.
Я настроил jenkins в спинакеру следующим образом и установил трубопровод спинакера.
jenkins:
# If you are integrating Jenkins, set its location here using the baseUrl
# field and provide the username/password credentials.
# You must also enable the "igor" service listed separately.
#
# If you have multiple jenkins servers, you will need to list
# them in an igor-local.yml. See jenkins.masters in config/igor.yml.
#
# Note that jenkins is not installed with Spinnaker so you must obtain this
# on your own if you are interested.
enabled: ${services.igor.enabled:false}
defaultMaster:
name: default
baseUrl: http://server:8080
username: spinnaker
password: password
Но при попытке запустить конвейер спинакера я вижу следующую ошибку.
Exception ( Start Jenkins Job )
403 No valid crumb was included in the request
Чтобы устранить эту проблему, я снял флажок "Предотвратить подделки Cross Site Request Forgery" в разделе jenkins.com/configureSecurity и начал работать.
Наконец, этот пост помог мне избавиться от проблемы крошки, но все же обезопасил Дженкинса от атаки CSRF.
Решение для недействительной крошки, включенное в запрос о выдаче
По сути, нам нужно сначала запросить crumb с аутентификацией, а затем снова выполнить вызовы POST api с crumb в качестве заголовка вместе с аутентификацией.
Вот как я это сделал,
curl -v -X GET http://jenkins-url:8080/crumbIssuer/api/json --user <username>:<password>
Ответ был,
{
"_class":"hudson.security.csrf.DefaultCrumbIssuer",
"crumb":"0db38413bd7ec9e98974f5213f7ead8b",
"crumbRequestField":"Jenkins-Crumb"
}
Тогда API-интерфейс POST с приведенной выше информацией о крошке.
curl -X POST http://jenkins-url:8080/job/<job-name>/build --user <username>:<password> -H 'Jenkins-Crumb: 0db38413bd7ec9e98974f5213f7ead8b'
Крошка - не что иное, как маркер доступа. Ниже API, чтобы получить крошку
https://jenkins.xxx.xxx.xxx/crumbIssuer/api/json
//замените его своим URL-адресом jenkins и сделайте GET-вызов в вашем почтальоне или вызывающей программе rest-api.
Это сгенерирует вывод как:
{
"_class": "hudson.security.csrf.DefaultCrumbIssuer",
"crumb": "ba4742b9d92606f4236456568a",
"crumbRequestField": "Jenkins-Crumb"
}
Ниже приведена более подробная информация и ссылка, связанная с тем же: Как запросить Crumb для издателя jenkins Jenkins на вики-странице: https://wiki.jenkins-ci.org/display/jenkins/remote+access+api
Если вы звоните так же через rest-api call, посмотрите ссылку ниже, где объясняется, как вызвать rest rest с помощью jenkins-crumb
https://blog.dahanne.net/2016/05/17/how-to-update-a-jenkins-job-posting-config-xml/
Пример:
curl -X POST http://anthony:[email protected]:8080/jenkins/job/pof/config.xml --data-binary "@config.xml" -data ".crumb=6bbabc426436b72ec35e5ad4a4344687"
Это решение БЕЗОПАСНО для использования
возникла эта проблема, когда мы изменили jenkins, чтобы они были доступны через обратный прокси-сервер.
В "Настройка глобальной безопасности" есть опция "Включить совместимость прокси-серверов". Это помогло с моей проблемой.
Перейдите в Manage Jenkins => Настройте глобальную безопасность.
Затем снимите флажок "Предотвращать подделку межсайтовых запросов"
У меня была эта проблема с моим Jenkins, установленным на экземпляре AWS EC2. Эта проблема исчезла, как только я открылся миру (разумеется, я имею в виду "Группы безопасности"), порты: 80, 8080 (порт jenkins по умолчанию) и 443. Я знаю, что это может быть чувствительно к кому-то, но это не так я, я сделал это, и проблема ушла!
... конечно, это может быть то же самое для GCP, Azure и других облачных сервисов