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

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

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

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

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

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

[simterm]

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

[/simterm]

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

[simterm]

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

[/simterm]

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

Заходим на страницу 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

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

[simterm]

$ git clone [email protected]:setevoy2/tests.git

[/simterm]

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

[simterm]

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

[/simterm]

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

[simterm]

$ touch test.file

[/simterm]

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

[simterm]

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

[/simterm]

Создаём PR:

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

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

Билд прошёл:

Лог Jenkins-а:

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

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

Готово.