Автоматизация в Gitlab
Привет всем, Лев у микрофона. В Gitlab'е у нас хранится все – документация, задачи, код, артефакты. Мы, хоть и благодарны за этот инструмент, но платить по 29 долларов за человека не хотим, поэтому так повелось, что у нас есть некоторая пачка сервисов, которая упрощает нам жизнь, о них и расскажу.
gitlab-webhook-setter
Небольшая утилита, которая, имея токен и конфигурационный файл, актуализирует настройки Webhook во всех наших репозиториях, групповых интеграции у нас нет, поэтому выкручиваемся так.
gitlab-telegram-bot
Один из наших основных помощников – небольшой сервер, который получает события от Gitlab и отправляем нам сообщения в Telegram, так мы видим новые комментарии, новые задачи, движения Merge Request'ов:
У нас небольшая команда и работаем мы в свободное время, поэтому видя, как кто-то что-то делает появляется мотивация и самому добавить новый функционал в проект.
remindme
Не то чтобы напрямую относится к Gitlab'у, но описано и запускается именно там через Sheduled Jobs, с помощью этого приложения мы напоминаем в Telegram о необходимости провести общий созвон:
pullreminders
Когда мы только начинали работу над Юккой, было сложно сработаться из-за разного ритма работы и разного опыта, поэтому мы запретили пуши в мастер и любые вливания изменений без аппрува Merge Request, а pullreminders занимался тем, что по субботам напоминал кому и что нужно проверить перед попаданием в мастер.
pullninja
Это наш основной помощник, он отвечает за целую пачку задач, эти маленькие кусочки функционала мы называем плагинами, вот некоторые из них:
- areas – добавляет на MR лейблы относительно измененных файлов, так проще понять, какого рода изменения здесь произведены относительно мастера;
- default milestone – задачи созданные без указания Milestone попадают в Backlog – отдельный Milestone для всех непрошеных задач;
- epic link – задачи с лейблом kind/feature и kind/bug могут быть автоматически слинкованы с задачей kind/epic, если у них есть общий групповой лейбл, так мы все мелкие задачи собираем в одну большую;
- require due date – задачи в некоторых проектах требуют указания Due Date, если дата не задана, будет добавлен соответствующий лейбл, так проще найти подобные задачи среди всех проектов;
- require matching label – каждая из задач в нашем трекере требует наличия двух характеристик – тип задачи и приоритет, если одного из них нет, то будет создан соответствующий лейбл, по которому, опять же, просто найти неописанные задачи;
- size – на каждый MR накидывается лейбл описывающий общий размер изменений;
- watinig for info – задачи помечаются специальным лейблом, если у них отсутствует описание;
- welcome – с помощью этого плагина мы приветствуем пользователей и поздравляем с первым Merge Request в нашем репозитории с документацией.
Помимо перечисленных плагинов были и экспериментальные, от которых мы отказались со временем, так как сработались и дополнительный контроль в виде автоматизации не требуется, например, плагин freeze, который добавлял в Pipeline шаг в статусе Failed, что блокировали вливание изменений в мастер.
Некоторые инструменты мы открыли и вы можете свободно их использовать (остальные, со временем, откроем тоже):
- https://gitlab.com/yuccastream/pullninja
- https://gitlab.com/yuccastream/pullreminders
- https://gitlab.com/yuccastream/gitlab-telegram-bot
Ну и напоследок, если хочется получать уведомления в Telegram, но не хочется что-то дополнительно запускать самому, переходите в раздел Settings -> Webhooks вашего проекта в Gitlab и добавляйте туда новый webhook с такими параметрами:
- URL: https://gitlab.yuccastream.com/telegram?chat_id=1234567890 (где 1234567890 - это идентификатор вашего чата/контакта в Telegram, куда будут приходить уведомления)
- Trigger – установите флаги: issue events, comments, merge request events.
И не забудьте пригласить к себе в чат нашего бота Pull Ninja (@Testico_Bot), сообщения будут отправляться от его имени.