Гита и Дженкинс Вебхук
Я тестирую Gitea и хотел бы вызвать сборку Jenkins, довольно простой вариант использования. Я понимаю, что есть существующая плагин GOGs, которую можно использовать, но недавно также обнаружил, что есть плагин Gitea для Jenkins.
В случае GOGS вы бы позвонили Дженкинсу по адресу: http://localhost:8080/gogs-webhook/?job=job_name
В приведенном выше примере очевидно обновляется местоположение Jenkins и имя задания по мере необходимости.
Проблема в том, что для плагина Gitea нет документации, но на основе исходного кода URL должен быть:
Http: // Дженкинс-URL / gitea-webhook / пост
Последовательность, которую я считаю, должна состоять в следующем:
- Гитея видит толчок и отправляет информацию Дженкинсу.
- Дженкинс Gitea webhook видит POST и использует информацию, чтобы получить новый исходный код из Gitea.
Вопрос в том, как плагин gitea знает, какую работу выполнять? Как вы это укажете? Прямо сейчас я вижу, что gitea отправляет POST Дженкинсу по указанному выше URL-адресу, но ничего не происходит, журналы Дженкинса также не содержат информации, чтобы понять, почему происходит сбой.
РЕДАКТИРОВАТЬ:
Я столкнулся с проблемой, когда после копирования сгенерированного открытого ключа SSH в учетную запись пользователя Gitea Jenkins по-прежнему не может получить доступ к репо, чтобы использовать Pipeline Editor. Не уверен, что мне здесь не хватает, так как я могу отлично выдвигать / извлекать данные с локального хоста (вне среды Docker) и проверил, что контейнеры действительно могут также отлично видеть друг друга....
Спасибо
6 ответов
Мне удалось успешно настроить комбо Jenkins/Gitea с использованием сравнительно недавних версий (я использую официальные док-контейнеры на основе Alpine для обоих). Я использовал этот вопрос Gitea в качестве руководства. Я не использовал плагин Gogs в Jenkins, только плагин Gitea. Я также не использую Pipeline, только классические задания с ручной настройкой.
В Jenkins: на странице настроек задания установите для параметра "Управление исходным кодом" значение "Git", укажите URL-адрес своего репо ( http://gitea-url.your.org/username/repo.git) и в разделе "Триггеры опроса". опция проверки раздела "Опрос SCM" без определения расписания. Эта настройка в основном говорит Jenkins опрашивать ваше репозиторий Gitea только по запросу через webhook.
В Gitea: под repo -> Settings -> Webhooks, добавьте новый webhook, установите URL-адрес http://jenkins_url.your.org/gitea-webhook/post и очистите секрет (оставьте это поле пустым).
В этот момент нажатие на кнопку "Тестовая доставка" должно привести к успешной попытке доставки (зеленая галочка).
Если ваши тестовые поставки не пройдены, попробуйте посмотреть, можете ли вы отправить POST на веб-крючок Дженкинса ( http://jenkins_url.your.org/gitea-webhook/post). Например, используя Postman с пустым телом, я получаю HTTP 400 Bad Request вместе с трассировкой стека Java, которая выглядит следующим образом:
java.lang.Exception: Only application/json content is supported, this was null
at org.kohsuke.stapler.HttpResponses.error(HttpResponses.java:83)
at org.jenkinsci.plugin.gitea.GiteaWebhookAction.doPost(GiteaWebhookAction.java:86)
at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)
at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:343)
at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:184)
at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:117)
at org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:129)
at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
<.. skipped ..>
Если вы получили что-то еще, опубликуйте это здесь.
Что касается вашего вопроса о том, как Дженкинс знает, какую работу построить, я понимаю, что тело запроса POST содержит ссылку на репо / ветку, и Дженкинс ищет это внутри, чтобы найти работу, которая ссылается на это репо (материал, который вы определили в страница настроек работы выше). Эта вики-страница Jenkins рассказывает немного больше об общих хуках, и есть также этот ответ с дополнительными ссылками, которые могут немного объяснить, что происходит под капотом.
Попробовав множество разных руководств, чтобы заставить веб-перехватчики работать с плагином Gitea, я обнаружил, что он не срабатывает, если имя хоста Gitea в запросе json не совпадает с тем, которое знает Дженкинс.
Я запускаю Jenkins и Gitea в отдельных контейнерах Docker, подключенных к одной и той же мостовой сети, и хотел, чтобы они обменивались данными с использованием внутренних имен хостов. Если у кого-то есть похожая настройка, попробуйте ввести общедоступные URL-адреса в Jenkins / Gitea . (В Jenkins также есть опция, в которой вы можете ввести псевдоним для URL-адреса Gitea, но у меня это не сработало.)
Это не совсем то, что я хотел, но в этом случае он отлично работает.
Я использую Gitea Plugin 1.0.4 на Jenkins, и у меня нет проблем с веб-хуками. У меня не установлен плагин Gog.
В пользовательском интерфейсе Gitea (хранилище -> настройки -> веб-зацепки) я могу вручную определить свой веб-зацеп с указанием URL-адреса: https://my-jenkins/gitea-webhook/post
Это можно проверить вручную, запустив "Тест доставки", как показано на этом рисунке:
Сторона Дженкинса Я настроил учетные данные для Gitea. Когда Jenkins находит проект с Jenkins file (я использую конвейер), он автоматически настраивает webhook (если его нет) для хранилища (сторона Gitea).
Gitea уведомит Дженкинса с помощью POST, содержащего много информации в формате JSON.
Дженкинс должен иметь доступ к GIT-репозиторию, поэтому вам нужно создать для него учетные данные.
Когда я первоначально установил Gitea Plugin в Jenkins и попытался настроить webhook в Gitea для запуска проекта Jenkins Pipeline (все сделано локально), тогда как @PhilW упоминалось выше (и предполагается, что вы используете Jenkins в http://localhost:8080
), вызывая http://localhost:8080/gitea-webhook/?job=job_name
из Гитеа не работает для меня тоже.
Сказав это, я установил плагин Gogs в Дженкинс, перенастроил свой веб-крючок в Гите http://localhost:8080/gogs-webhook/?job=job_name
(отмечая разницу) и Дженкинс построил мой проект Pipeline без проблем.
Также стоит упомянуть, что в качестве простого подвоха я обнаружил, что если вы укажете базовый URL-адрес вашего сервера Jenkins (в вашем веб-браузере) с соответствующим дополнением webhook - например,
http://localhost:8080/gogs-webhook/
(с установленным в Jenkins плагином Gogs) илиhttp://localhost:8080/bitbucket-hook/
(с установленным и включенным плагином Bitbucket),
и все, что вы получите, - это пустая страница, это, кажется, указывает на то, что соответствующий веб-крючок в Дженкинсе, скорее всего, работает как задумано.
Определение http://localhost:8080/gitea-webhook/
(с установленным и включенным плагином Gitea) возвращает мне ошибку HTTP 404, поэтому я подозреваю (просто догадка), что в этом плагине может быть одна или две ошибки.
URL-адрес Gitea, который у меня был в конфигурации Jenkins, был
http://192.168.1.105:3000
а Дженкинс просто игнорировал все триггеры вебхуков.
После того, как я добавил «Псевдоним URL» для Gitea в Jenkins/configure/gitea/advanced, он сработал:
http://localhost:3000
Ответ fugi указал мне правильное направление. У меня аналогичная установка с Jenkins и Gitea в отдельных док-контейнерах на одном компьютере.
Вы можете использовать Generic Webhook Trigger Plugin.
Используйте функцию токена и используйте разные токены для каждой работы.