Gitlab Webhooks + Redmine, интеграция с помощью вебхуков

Задача — при создании мерж реквеста(pull request) в Gitlab обновлять задачу в Redmine. Например, обновить описание задачи, добавив ссылку на мерж реквест, или отредактировать любое другое поле. Стандартная интеграция из под коробки Gitlab не позволяла это сделать. Было решено делать это через веб хуки.

Алгоритм работы: после каждого открытия мерж реквеста отправляется событие на кастомный endpoint. Будет отправляться имя ветки из MR, projectCode-issueId-task-description, откуда будет парситься ID задачи Redmine. Пример имени ветки wh-123456-add-webhooks, где 123456 — это ID задачи.

Требования

Аккаунт Gitlab с готовым репозиторием. Пример — https://gitlab.com/Carsak/webhooks-example

Аккаунт Redmine. Для тестов отлично подойдет бесплатный http://www.hostedredmine.com . Для начала работы потребуется лишь зарегистрироваться и настроить обычный проект.

Endpoint — ресурс который обработает событие от Gitlab-a. Для тестов отлично подойдет любой PAAS сервис, далее будет использоваться Heroku.

Подготовка Endpoint

Тут большое поле для фантазии.  Как прототип, реомендую склонировать https://gitlab.com/Carsak/webhooks-example и запушить на Heroku.

  1. Создать или склонировать репозитории из Gitlab
  2. Установить Heroku Cli
  3. Создать проект
  4. Добавить в репозитории ссылку на Heroku
  5. Запустить проект
  6. Проект доступен по адресу https://gitlab-webhooks-alma.herokuapp.com/ . На пустой запрос должна быть ошибка
Подготовка Gitlab

Вся подготовка делается на странице Project Settings -> Integrations -> Integration webhooks

Страница настроек Gitlab Webhooks
Страница настроек Gitlab Webhooks
  1. Добавить Endpoint
  2. Выбрать событие
  3. Добавить вебхук
Запуск

После создания любого мерж реквеста, например https://gitlab.com/Carsak/webhooks-example/merge_requests/2, запуститься вебхук. Проверить запрос можно на странице Project Settings -> Integrations -> Integration webhooks -> Edit

Кнопка редактирования Gitlab webhook
Кнопка редактирования Gitlab webhook
Логи отправленных событий
Логи отправленных событий

В результате получаем замечательную картинку обновления задачи

Результат работы веб хука
Результат работы веб хука

Весь исходный код можно найти по адресу https://gitlab.com/Carsak/webhooks-example