Jenkins: Github Pull-Request Builder плагин

Автор: | 11/13/2018
 

Плагин Pull-Request Builder предназначен для запуска билдов, когда в Github репозитории создаётся новый pool request, что бы выполнить сборку до того, как PR будет добавлен в основную ветку.

Результат билда будет добавлен комментарием к этому реквесту, после чего можно принимать решение — принимать реквест, или нет.

Установка Jenkins и плагина

Устанавливаем Docker:

root@ip-172-31-10-151:/home/admin# curl https://get.docker.com/ | bash

Запускаем Jenkins в Docker:

root@ip-172-31-10-151:/home/admin# docker run -d -ti -p 8080:8080 jenkins/jenkins:lts

Тут просто быстрый запуск, более полные примеры есть тут>>> и тут>>>.

Заходим на страницу Jenkins, проводим обычную первоначальную установку, переходим в Plugins, устанавливаем Pull Request Builder:

Github user и API-токен

Для работы плагина требуется API токен. В случае использования organizations в Github — лучше создать отдельного пользователя в Github, у которого будут права owner на репозиторий, и создать ему токен.

В этом примере делается на обычном Github аккаунте, потому делаем API-токен для своего пользователя.

Переходим в https://github.com/settings/tokens, добавляем токен с правами repo и admin:repo_hook:

Сохраняем токен, т.к. больше его не увидим.

Переходим в Manage Jenkins > Configure System, в блоке GitHub Pull Request Builder настраиваем данные доступа, добавляем токен в Credentials, тип Secret text:

Оставляем Auto-manage webhooks, по желанию добавляем Use comments to report results when updating commit status fails и Use comments to report intermediate phases:

Тут же можно сразу протестировать токен и доступы:

Добавление билда

Создаём новую джобу:

В General добавляем GitHub project, в Build Triggers включаем GitHub Pull Request Builder, и в GitHub API credentials выбираем данные доступа — токен, который добавили ранее в настройках:

В Admin list добавляем пользователя, комментарии которого всегда билдить (если пользователя, который добавит комментарий в PR или создаст PR в Admins list нет — плагин создаст комментарий с просьбой заапрувить билд, см. документацию тут>>>).

Отмечаем Use github hooks for build triggering, что бы выполнять запуск, используя webhook Github-а, в PipelineScript описываем действия.

Плагин задаёт несколько полезных переменных:

  • ghprbActualCommit
  • ghprbActualCommitAuthor
  • ghprbActualCommitAuthorEmail
  • ghprbPullDescription
  • ghprbPullId
  • ghprbPullLink
  • ghprbPullTitle
  • ghprbSourceBranch
  • ghprbTargetBranch
  • ghprbCommentBody
  • sha1

Которые можно использовать в билдах.

Например — можно создать такой скрипт:

println("Building from branch ${ghprbSourceBranch}")

Сохраняем джобу, и в Settings репозитория должен появится созданный плагином webhook:

Создание Github PR

Клонируем репозиторий:

git clone git@github.com:setevoy2/tests.git

Создаём бранч:

cd tests/
git checkout -b pr-test
Switched to a new branch 'pr-test'

Делаем изменения:

touch test.file

Коммитим, пушим:

git add test.file && git commit -m "testing PR" && git push -u origin pr-test

Создаём PR:

Github выполняет webhook к Jenkins-у:

Первый был создан после создания джобы в Jenkins, далее, после каждого комментария/нового PR — создаётся новый webhook, который триггерит билд.

Билд прошёл:

Лог Jenkins-а:

Результат добавляется в PR:

По ссылке Details можно перейти к билду в Jenkins.

Готово.