Вебхуки

или

автоматизация рутинных операций с помощью API Гитлаба и Ютрека

Кто я

Денис Шкотов

Стажер frontend-разработчик

Контур.Recognition (Истребования)

Пример рутины 1

Text

  1. Создали merge request
  2. Перешли в issue Youtrack'а
  3. Установили в Reviewed by имя ревьювера merge request'а

Пример рутины 2

Text

  1. Пофиксили что-то после ревью merge request'а
  2. Установили в assignee Гитлаба имя ревьювера
  3. Отписались в тикете на Ютреке, что фикс был сделан

Пример рутины ∞

Text

  1. Сделали что-то 
  2. Перешли в Гитлаб/Ютрек
  3. Снова сделали что-то, что, могло бы быть автоматизировано

Варианты решения

Text

1. Оставить все как было (вручную)

2. Назначить того, кто будет это делать (дежурный \ бэтмен \ флэш \ etc)

3. Автоматизировать

Вебхук (Webhook)

Обработчик события, который шлет запрос на указанный URL, с информацией об этом событии

Webhooks vs API

Application

API

request

response

Application

request

Webhook

Event

Site

Site

gitlab-yt-webhooks (Хуки)

"Автоматизировать всех человеков"

Что умеют делать хуки (gitlab-yt-webhooks)?

Получать информацию из поступающих запросов

Совершать манипуляции с Gitlab и\или Youtrack в зависимости от полученной информации

Пример

  1. Создали merge request
  2. Gitlab посылает post-запрос на указанный URL с инфой о событии
  3. gitlab-yt-webhooks его обрабатывает, и совершает действия в зависимости от типа запроса

А как все работает?

Node.js

Обработчики post-запросов

Парочка классов для работы с API

А что я сделал для хуков?

Улучшенное распознавание ключевых слов в комментарии на Гитлабе

const isApproved = text.toLowerCase().match(/#(?:app?roved|acc?epted)/);
const isRejected = text.toLowerCase().match(/#rejected/);
const isFixed = text.toLowerCase().match(/#fixed/);

А что я сделал для хуков? 2

Изменение assignee merge request'а, в зависимости от ключевого слова в комментарии (#fixed \ #rejected)

А что я сделал для хуков? 3

Хочу себе такое же! Где взять?

903

или

Всем спасибо. Вопросы?

903

или

Вебхуки

By Alexander Sushko