Jenkins. Сборка проекта по коммиту в Bitbucket

Логотип BitbucketВ прошлом посте я рассказывал о том, как установить Jenkins на сервер под управлением Linux-дистрибутива семейства Debian. В этом же я кратко расскажу о том, как научить Jenkins запускать сборку по коммиту (push’у коммитов) в ветку репозитория Bitbucket.

Подобная связка осуществляется в два этапа: сначала мы настраиваем в параметрах задания удалённый триггер, а потом в параметрах репозитория устанавливаем хук.

Настройка задания в Jenkins

Удалённый запуск задач
Удалённый запуск задач

Переходим на страницу нашего проекта и выбираем в панели «Configure». Здесь, в разделе «Build Triggers» нам нужно разрешить удалённый вызов сборки путём включения галки «Trigger builds remotely (e.g., from scripts)» и установки токена. Токен нужен для того, чтобы только вы могли запустить сборку проекта, а у злоумышленников или ботов, проверяющих адреса не было возможности устроить вам DoS. Его можно сгенерировать или придумать. Главное, чтобы он был достаточной длины, чтобы исключить случайность или перебор. Записывать его не обязательно, так как он всегда будет доступен в настройках задания в открытом виде.

Настройка хука в Bitbucket

Зайдём в настройки репозитория и выберем раздел «Hooks», а затем создадим новый хук типа «Jenkins». Перед нами предстанет «окошко», в котором будет необходимо ввести следующие данные:

  • Csrf Enabled
    Эта галочка обозначает, что у вас в настройках безопасности Jenkins включена защита от CSRF-атак. Лучше всего включить её в настройках и, соответственно, поставить эту галочку. Для этого идём в «Manage Jenkins» — «Configure Global Security» и ставим галку «Prevent Cross Site Request Forgery exploits», а затем выбираем «Default Crumb Issuer».
  • Endpoint
    Здесь нужно указать URL вашего Jenkins. Однако, всё немного сложнее, чем кажется и только токена будет недостаточно, если вы закрывали доступ к системе. Для составления адреса понадобятся дополнительные данные из вашей учётной записи в Jenkins. Нажимаем на свой логин в правом верхнем углу, выбираем «Configure» и в разделе «API Token» показываем токен вашей учётной записи Jenkins (не путать с токеном запуска задания сборки) кнопкой «Show API Token…».
    Теперь у нас есть данные для составления URL хука — подставим в стандартный тип адреса, включающий в себя логин и пароль:

    Таким образом если Jenkins работает по адресу http://my-jenkins.tld:8080/ , наш User ID — skobkin , а токен учётной записи — asklasdashdkjasdkjas , мы получим адрес вида
  • Module name
    Здесь по умолчанию можно ничего не писать. Но при желании можно указать коммиты в какие модули (директории) будут приводить к вызову сборки в Jenkins.
  • Project name
    Тут нужно указать название задания (Job) в Jenkins, которое будет запускаться по коммиту.
  • Token
    А здесь вы указываете тот токен, который задали в настройках удалённого вызова задания.

Описание настроек указанных выше на английском можно найти здесь.

Теперь можно сохранять хук и тестировать связку в деле.

Альтернативы

Опрос репозитория

Одним из вариантов на замену может служить опция «Poll SCM» в разделе «Build Triggers» задания Jenkins. Однако такой способ работает с помощью CRON и выполняет избыточную работу в сравнении с описанным выше методом.

BitBucket Plugin

Кроме того, можно найти плагин, который позволяет задавать произвольные хуки с POST-запросами на Bitbucket. Его минус в том, что он не использует токен и, в случае открытого доступа к системе может позволить вызывать сборку независимо от событий репозитория. Хотя, в обратном случае он может помочь обеспечить несколько большую гибкость.

Заключение

Вот таким, довольно простым способом можно настроить автоматическую сборку проекта в Jenkins по коммиту в Bitbucket. Важно понимать, что механизм удалённых триггеров универсален и вы без особого труда сможете настроить аналогичные действия по коммиту на Github или же вовсе вызывать сборку собственным скриптом из своего репозитория или рабочей машины.

Leave a Comment

Your email address will not be published.

Яндекс.Метрика Лицензия Creative Commons