Я новичок в Jenkins, но успешно создал конвейер, который будет создавать наш проект, размещенный на GitHub. Пользователь может даже указать ветку (master, development, test и т. д.), которую он хочет построить. Теперь я хотел бы реализовать автоматические сборки всякий раз, когда происходит переход в определенную ветку (например, разработка). Отправка в другие ветки не должна приводить к автоматической сборке. У меня возникли проблемы с этим и даже с поиском информации об этом. Я нашел:
https://www.devopsschool.com/blog/how-to-build-when-a-change-is-pushed-to-github-in-jenkins/
Мой первый вопрос: существуют ли какие-либо другие источники информации для настройки автоматических сборок в Jenkins, когда резервным исходным репозиторием является GitHub (в отличие, например, от Bitbucket)? Вышеупомянутая статья датирована 2021 годом. Некоторые шаги и снимки экрана не соответствуют последним версиям Jenkins.
Конкретно с упомянутой статьей я выполнил все шаги. Вероятно, не удалось, иначе все работало бы! Следует отметить, что на шаге 2 я добавил сервер GitHub. Я указал URL-адрес API как https://api.github.com. Нажатие «Проверить соединение» приводит к:
Credentials verified for user davidrunner, rate limit: 4998
что кажется хорошим знаком. Я не установил флажок «Управление перехватчиками», так как документ, похоже, не проверял его. Я полагаю, что выполнил шаг 3 и настроил шаг 4 в репозитории GitHub.
Однако, когда я фиксирую и отправляю тестовое изменение в ветку «master» или «develop», я вижу в разделе «Последние поставки» для веб-перехватчиков красный треугольник с восклицательным знаком. Ответ пустой с «502». Я считаю, что это означает, что соединение было отклонено машиной Дженкинса.
Мои следующие вопросы: Как я могу устранить эту неполадку? Что мне следует проверить? Я еще раз подчеркиваю, что я, безусловно, могу вытащить код из Дженкинса и собрать. Итак, очевидно, что связь между GitHub и машиной Дженкинса возможна.
Я попробовал предложение Iterokun @Iterokun в комментариях ниже.
Когда я напрямую использую: 1xx.xx.xxx.xx:8080/github-webhook
Я вижу следующие ошибки в журналах Jenkins:
May 22, 2024 3:39:06 PM INFO org.jenkinsci.plugins.github_branch_source.ApiRateLimitChecker$RateLimitCheckerAdapter checkRateLimit
LocalChecker for rate limit was not set for this thread. Configured using system settings with API URL 'https://api.github.com'.
May 22, 2024 3:41:21 PM SEVERE org.jenkinsci.plugins.github.webhook.GHEventPayload$PayloadHandler parse
**Unknown content type null**
May 22, 2024 3:41:21 PM WARNING hudson.init.impl.InstallUncaughtExceptionHandler handleException
Caught unhandled exception with ID 288b80b3-2bbf-49ee-a010-c0d2bab5e8d4
**java.lang.Exception: Method POST required**
at org.kohsuke.stapler.HttpResponses.error(HttpResponses.java:92)
Я также попробовал команду Curl Post и получил следующее:
PS C:\andrew\Firmware> curl.exe -X POST http://1xx.xx.xxx.xx:8080/github-webhook/
<html>
<head>
<meta http-equiv = "Content-Type" content = "text/html;charset=ISO-8859-1"/>
<title>**Error 400 Hook should contain event type**</title>
</head>
<body><h2>**HTTP ERROR 400 Hook should contain event type**</h2>
<table>
<tr><th>URI:</th><td>/github-webhook/</td></tr>
<tr><th>STATUS:</th><td>400</td></tr>
<tr><th>MESSAGE:</th><td>Hook should contain event type</td></tr>
<tr><th>SERVLET:</th><td>Stapler</td></tr>
</table>
<hr/><a href = "https://eclipse.org/jetty">Powered by Jetty:// 10.0.20</a><hr/>
В журнале Дженкинса я вижу:
22 мая 2024 г., 19:26:07 SEVERE org.jenkinsci.plugins.github.webhook.GHEventPayload$PayloadHandler анализ Неизвестный тип контента: ноль
Должен стыдливо признаться, что ответ был довольно очевиден. Конечно, задним числом всё очевидно :) Комментарии Итерокуна привели к ответу. Мой экземпляр Jenkins находится за брандмауэром, и доступ к нему должен осуществляться через VPN. Вот почему я мог достичь этого с помощью предложения @Iterokun «завиток ...». с моего рабочего ноутбука. Я почти всегда использую VPN. Фактически, когда я отключил VPN, я даже не смог пропинговать экземпляр Jenkins, не говоря уже об использовании Curl. GitHub находится в облаке и понятия не имеет о нашем брандмауэре или VPN. До него можно добраться из Дженкинса, но он не может достичь Дженкинса. Итак, вместо использования веб-перехватчиков, переходящих из Github в Jenkins, я могу опросить Jenkins в Github, или, если я действительно заинтересован и полон решимости заставить веб-перехватчики работать, есть несколько альтернатив:
Первое, что нужно попробовать, — это отправить запрос на публикацию с вашего ноутбука на URL-адрес, который вы настроили в веб-перехватчике.
curl -X POST url
Вы не получите 200, поскольку вы не предоставляете ожидаемую полезную нагрузку, но и 502 не должно быть.
Как только вы подтвердите, что сам Дженкинс не является источником 502, вы сможете проверить сетевое подключение за пределами вашей сети, например, с ноутбука, подключенного к вашему мобильному телефону.
Если вы обнаружите, что конфигурация вашей сети блокирует вызовы, вы можете попробовать открыть трафик для IP-адресов, с которых поступают вызовы веб-перехватчика. Они описаны в конечной точке мета API в разделе «хуки».