Использование конвейера jenkins для создания запросов на github - PullRequest
1 голос
/ 20 марта 2019

Похоже, это одна из наиболее важных, но менее понятных и документированных возможностей Г.Х. и Дженкинса, которая, похоже, полностью противоречит цели КИ ...

Я пытаюсь настроить простое, "начать сборку при открытии запроса на извлечение" Работа в Дженкинс.Я отсканировал десятки постов, несколько лет назад, но пока не нашел решения, которое действительно работает, от начала до конца.Я использую GH 2.15.4 и Jenkins 2.89.3 с плагином GH Pull Request Builder.Я пытался настроить конвейерную работу и проект по фристайлу, следуя различным постам и документам.Ничто не работает, как ожидалось.Даже не близко.Мне удалось заставить работать некоторую функциональность, но не без большого количества проб и ошибок, которые не оставляют меня в смятении.Webhooks в равной степени бесполезны в выполнении того, что необходимо, так как кажется, что ничто не запускает работу в Jenkins, независимо от того, как она настроена.

Для начала, есть ли ссылки или документы, которые объясняют, что следующие проверки статусаJenkins:

непрерывная интеграция / jenkins / branch

непрерывная интеграция / jenkins / pr-head

непрерывная интеграция / jenkins / pr-слияние

Видимо, нет способа удалить или отредактировать их ... они просто "появляются" благодаря Дженкинсу.Я видел некоторые обсуждения, но некоторые объяснения противоречат друг другу, поэтому они могут быть просто устаревшими, неточными и т. Д. Я хочу знать, «что делает что», поэтому я знаю, что должно быть «обязательным», как часть проверки статуса PR.

Будем благодарны за любые указатели!

Ответы [ 2 ]

2 голосов
/ 21 июня 2019

Я согласен, эта проблема сложна, потому что Дженкинс и его плагины сильно изменились за эти годы.Позвольте мне рассказать вам, как я выполнил то, что вы просите.Я опубликую все номера своих версий (в основном, в актуальном состоянии).

Jenkins Версия: 2.176.1 (java -jar /usr/share/jenkins/jenkins.war --version)

Плагины

  • github 1.29.4
  • github-api 1.9
  • github-branch-source 2.5.3
  • github-pullrequest 0.2.5
  • pipe-github-lib 1.0

Также я использую интерфейс Blue Ocean, который может влиять на вещи (кто знает)

  • blueocean 1.17.0
  • blueocean-git-pipe 1.17.0
  • blueocean-github-pipe 1.17.0

Github Webhooks

Прежде всего, настройте webhooks для вашей системы. Это хорошее руководство для Github Webhooks Перейдите в свой репозиторий Github и нажмите на вкладку Настройки.Затем выберите «Webhooks» в левом меню:

URL-адрес моей настройки Jenkins: https://jenkinsci.dorian.com. Итак, в поле «Payload URL» я поставил https://jenkinsci.dorian.com/github-webhook/

Я оставил настройки как «application / json» и «send me everything» и «active»

В разделе Webhooks есть удобный раздел «Недавние поставки», который может показать вам, делают ли ваши веб-зацепки дженерики.Сначала у меня был неправильный URL, поэтому у меня рядом с ними красные крестики.Теперь все они отмечены зелеными галочками.

Github Access Token

Многие руководства предполагают, что вы предоставляете Jenkins персональный токен доступа для связи с вашим репо.Для этого перейдите к аватару своей учетной записи в правом верхнем углу и выберите «Настройки» -> «Настройки разработчика» -> «Токены личного доступа» -> «Создать токен»

. Поместите в описание все, что хотите.В разделе «Выбор областей действия», если вы хотите, чтобы он работал, установите все флажки в списке.

Я выбрал:

  • репо: статус
  • запись: repo_hook
  • чтение: repo_hook
  • admin: org_hook

Нажмите «Сохранить», и вам будет показан ваш секретный ключ.Скопируйте это куда-нибудь в безопасное место (мы будем использовать его в ближайшее время).

Настройка Jenkins

Теперь о сложной части.Попробуйте установить все перечисленные выше плагины.

Перейдите в Jenkins-Manage Jenkins-> Настроить систему

Найдите раздел Github и нажмите Добавить сервер Github

В разделе «Учетные данные» нажмите «Добавить»."Вы попадете в меню.Выберите «Секретный текст»

  • Область действия: глобальная
  • Секрет: вставьте свой токен доступа с более раннего
  • ID: (я оставил это поле пустым)
  • Описание: DorianGithubCreds

Хит сохранить.Затем выберите DorianGithubCreds из списка учетных данных.

Чтобы проверить, нажмите «Проверить подключение».Mine возвращает «Учетные данные, подтвержденные для пользователя dnrahamim», ограничение скорости: 4998

Теперь перейдите к Github Pull Request Builder

  • URL-адрес API сервера GitHub: https://api.github.com
  • Переопределение URL Jenkins: (пусто)
  • Общий секретный ключ: (пусто)
  • Учетные данные: DorianGithubCreds
  • Автоматическое управление веб-заданиями: true
  • Все остальное пусто

Настроить задание

Перейти к заданию, которое должно создавать ваше хранилище Выберите «Настроить» в левом меню

В разделе Projects-> Github Organization

  • Учетные данные: DorianGithubCreds
  • Владелец: Dorian
  • Поведения:
    • Открытие филиалов
      • Стратегия: исключить ветви, которые также представлены как PR
    • Обнаружение запросов извлечения из источника
      • Стратегия: объединение запроса извлечения с текущей ревизией целевой ветви
    • Обнаружение пул-запросов от вилок
      • Стратегия: объединение запроса извлечения с текущей версией целевой ветки
      • Доверие: от пользователей с правами администратора или записи
  • Распознаватели проектов
    • Конвейер Jenkinsfile
      • Путь: Jenkinsfile (мой Jenkinsfile находится в корне проекта)
  • Стратегии сборки: (намеренно пусто)

Уведомления

Теперь, когда я делаю запрос на извлечение или всякий раз, когда я публикую изменения в запросе на извлечение, Дженкинс запускает для этого новую сборку.branch.

Сам запрос на извлечение в Github также перечисляет свои «проверки состояния» внизу.Когда сборка находится в состоянии ожидания, проверка состояния желтая.Если это удастся, он получает зеленую галочку.Если это не удается, он получает красный X.

У меня изначально была проблема, потому что у меня был старый ящик Jenkins, который также был настроен для управления веб-хитов Github и создания запросов на извлечение.Его сборки терпели неудачу, поэтому его уведомления были теми, что поступали на мой запрос на извлечение.Я исправил эту проблему, запретив этой старой коробке Дженкинса строить мои новые ветви.Как только старая коробка Дженкинса перестала строить, уведомления из новой коробки Дженкинса добрались до Github.

Завершение

Вот и все!Это все, что я намеренно настроил.Пожалуйста, попробуйте мою конфигурацию и посмотрите, работает ли она для вас.Дайте мне знать, если я что-то пропустил.

Сложная часть настройки Jenkins с Github заключается в том, что, хотя существует много руководств, предложения часто конфликтуют друг с другом, и очень многие устарели (иногда даже официальны).документация устарела).

Тем не менее, вот некоторые ресурсы:

  1. Это хорошее руководство для Github Webhooks
  2. Технический документ Github по CI с Дженкинсом (он не дает подробных объяснений, но дает хороший обзор)
  3. Плагин GitHB для создания запросов на извлечение Github
  4. Полуофициальный пост SO для отображения статуса сборки на репозитории Github
0 голосов
/ 20 марта 2019

GitHub имеет функцию «добавить webhook», которая доступна в настройках репозитория -> раздел Webhooks. Это имеет 4 входа 1. Полезная нагрузка URl - введите URL-адрес Jenkins. 2. Тип контента - приложение / JSON 3. Секрет - это необязательно, если вы хотите настроить секрет 4. Какие события вы бы хотели активировать? - выберите опцию «Позвольте мне выбрать отдельные события» Кучка опций флажка видна, отметьте опцию «Извлечь запросы». Эта опция будет отправлять запрос в Jenkins при открытии запроса Pull

Следующим шагом является создание задания в Jenkins, которое будет прослушивать события GitHub и запускать сборку

...