Гита и Дженкинс Вебхук

Я тестирую Gitea и хотел бы вызвать сборку Jenkins, довольно простой вариант использования. Я понимаю, что есть существующая плагин GOGs, которую можно использовать, но недавно также обнаружил, что есть плагин Gitea для Jenkins.

В случае GOGS вы бы позвонили Дженкинсу по адресу: http://localhost:8080/gogs-webhook/?job=job_name

В приведенном выше примере очевидно обновляется местоположение Jenkins и имя задания по мере необходимости.

Проблема в том, что для плагина Gitea нет документации, но на основе исходного кода URL должен быть:

Http: // Дженкинс-URL / gitea-webhook / пост

Последовательность, которую я считаю, должна состоять в следующем:

  1. Гитея видит толчок и отправляет информацию Дженкинсу.
  2. Дженкинс 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.

Используйте функцию токена и используйте разные токены для каждой работы.

Другие вопросы по тегам