April 25, 2023

Автоматизация в Gitlab

Привет всем, Лев у микрофона. В Gitlab'е у нас хранится все – документация, задачи, код, артефакты. Мы, хоть и благодарны за этот инструмент, но платить по 29 долларов за человека не хотим, поэтому так повелось, что у нас есть некоторая пачка сервисов, которая упрощает нам жизнь, о них и расскажу.

gitlab-webhook-setter

Небольшая утилита, которая, имея токен и конфигурационный файл, актуализирует настройки Webhook во всех наших репозиториях, групповых интеграции у нас нет, поэтому выкручиваемся так.

gitlab-telegram-bot

Один из наших основных помощников – небольшой сервер, который получает события от Gitlab и отправляем нам сообщения в Telegram, так мы видим новые комментарии, новые задачи, движения Merge Request'ов:

У нас небольшая команда и работаем мы в свободное время, поэтому видя, как кто-то что-то делает появляется мотивация и самому добавить новый функционал в проект.

remindme

Не то чтобы напрямую относится к Gitlab'у, но описано и запускается именно там через Sheduled Jobs, с помощью этого приложения мы напоминаем в Telegram о необходимости провести общий созвон:

pullreminders

Когда мы только начинали работу над Юккой, было сложно сработаться из-за разного ритма работы и разного опыта, поэтому мы запретили пуши в мастер и любые вливания изменений без аппрува Merge Request, а pullreminders занимался тем, что по субботам напоминал кому и что нужно проверить перед попаданием в мастер.

pullninja

Это наш основной помощник, он отвечает за целую пачку задач, эти маленькие кусочки функционала мы называем плагинами, вот некоторые из них:

  1. areas – добавляет на MR лейблы относительно измененных файлов, так проще понять, какого рода изменения здесь произведены относительно мастера;
  2. default milestone – задачи созданные без указания Milestone попадают в Backlog – отдельный Milestone для всех непрошеных задач;
  3. epic link – задачи с лейблом kind/feature и kind/bug могут быть автоматически слинкованы с задачей kind/epic, если у них есть общий групповой лейбл, так мы все мелкие задачи собираем в одну большую;
  4. require due date – задачи в некоторых проектах требуют указания Due Date, если дата не задана, будет добавлен соответствующий лейбл, так проще найти подобные задачи среди всех проектов;
  5. require matching label – каждая из задач в нашем трекере требует наличия двух характеристик – тип задачи и приоритет, если одного из них нет, то будет создан соответствующий лейбл, по которому, опять же, просто найти неописанные задачи;
  6. size – на каждый MR накидывается лейбл описывающий общий размер изменений;
  7. watinig for info – задачи помечаются специальным лейблом, если у них отсутствует описание;
  8. welcome – с помощью этого плагина мы приветствуем пользователей и поздравляем с первым Merge Request в нашем репозитории с документацией.

Выглядит все примерно так:

Помимо перечисленных плагинов были и экспериментальные, от которых мы отказались со временем, так как сработались и дополнительный контроль в виде автоматизации не требуется, например, плагин freeze, который добавлял в Pipeline шаг в статусе Failed, что блокировали вливание изменений в мастер.

Некоторые инструменты мы открыли и вы можете свободно их использовать (остальные, со временем, откроем тоже):

Ну и напоследок, если хочется получать уведомления в Telegram, но не хочется что-то дополнительно запускать самому, переходите в раздел Settings -> Webhooks вашего проекта в Gitlab и добавляйте туда новый webhook с такими параметрами:

  1. URL: https://gitlab.yuccastream.com/telegram?chat_id=1234567890 (где 1234567890 - это идентификатор вашего чата/контакта в Telegram, куда будут приходить уведомления)
  2. Trigger – установите флаги: issue events, comments, merge request events.

И не забудьте пригласить к себе в чат нашего бота Pull Ninja (@Testico_Bot), сообщения будут отправляться от его имени.