Дженкинс и GitHub webhook: HTTP 403
У меня есть GitHub-репозиторий, о котором я хотел бы уведомить Дженкинса о новых коммитах через хук после получения. Я установил плагин GitHub в Jenkins и позволил Jenkins управлять своими собственными URL-адресами перехвата. Проект имеет правильный URL-адрес хранилища git и получает команду "Построить, когда изменения передаются в GitHub". Когда GitHub отправляет тестовую полезную нагрузку, я нахожу это на веб-сервере nginx Jenkins:
207.97.227.233 - - [15/Sep/2011:07:36:51 +0000] "POST /github-webhook/ HTTP/1.1" 403 561 "-" "-"
Я использовал SSL, поэтому отключил его безрезультатно. Нужно ли предоставлять специальные разрешения анонимному пользователю в матрице разрешений?
Пожалуйста, простите за отсутствие файлов конфигурации: я рад поделиться с вами теми, которые могут существовать, но я не знаю, что может быть полезным для обмена.
3 ответа
Поскольку я не разрешаю анонимный доступ, оказывается, что мне нужно было создать определенного пользователя для толчков GitHub и предоставить ему общее чтение, создание задания и чтение задания. Также было необходимо добавить аутентификацию в URL-адрес webhook, например:
https://foo:password@jenkins.example.com/github-webhook/
Из инструкций Github ("Настройка глобальной аутентификации", первый раздел),
1. Create a user in Jenkins which has, at a minimum, Job/Build permissions
2. Log in as that user (this is required even if you are a Jenkins admin user), then click on the user's name in the top right corner of the page
3. Click 'Configure,' then 'Show API Token...', and note/copy the User ID and API Token.
4. In GitLab, when you create webhooks to trigger Jenkins jobs, use this format for the URL and do not enter anything for 'Secret Token': http://USERID:APITOKEN@JENKINS_URL/project/YOUR_JOB
В моем случае я использовал http://USERID:APITOKEN@myIPaddress:808/
и нет project/YOUR_JOB
Как упоминалось ранее, Jenkins не разрешает анонимный доступ (вы не хотите, чтобы люди запускали сборки для вас!). Добавление имени пользователя и пароля в открытом виде - не лучшее решение.
1) Если ваш Jenkins находится за VPN, вам нужно убедиться, что ваш URL Jenkins webhooks открыт
2) В конфигурации плагина GitHub добавьте правильный доступный URL-адрес веб-крючка Дженкинса ( https://jenkins.example.com/github-webhook/) в Override Hook URL
3) Добавить секрет в Shared secret
раздел (желательно длинная случайная строка). Это будет токен, отправленный из Jenkins на GitHub и наоборот для аутентификации. Это должно отличаться от учетных данных сервера GitHub!
4) Убедитесь, что у пользователя есть доступ владельца для добавления веб-хуков в репозитории GitHub.
5) Не забудьте перерегистрировать вебхуки после этого
https://username:password@jenkins.example.com/github-webhook/
работал для меня, но пароль должен быть закодирован для полезной нагрузки для работы. Мой github не смог связаться с jenkins из-за авторизации nginx, но передача имени пользователя и закодированного пароля работала!