GitLab уведомления  в Telegram

GitLab уведомления в Telegram

У меня острая неприязнь email уведомлений. Если сообщений много, то проще получать уведомления в Telegram. Поэтому я для себя написал бота, который сообщает об основных событиях в GitLab.

· 3 мин.

Bitbucket Server отказался от своего self-host решения, а уходить в облако наша команда не собиралась. Поэтому мы перешли на GitLab.

У меня острая неприязнь к email уведомлениям, и большая любовь к Telegram. Поэтому я решил переписать бота для уведомлений из Bitbucket для работы с GitLab.

Проект был написан для личных нужд и еще разрабатывается, но вроде все стабильно, но это не точно. При обнаружении багов и “неочевидного поведения”, буду рад получить обратную связь в issues.

Возможности

Короткое описание возможностей:

  • Уведомление о новых MergeRequests
  • Уведомление о конфликте в вашем MergeRequests
  • Уведомление об обновлении MergeRequests
  • Уведомление об изменении статуса вашего MR: (MERGE, CLOSE, DELETE)
  • Уведомление о новых задачах в ваших MR
  • Уведомление при упоминаниях в комментариях
  • Уведомления при ответах в дискуссии, в которой вы писали
  • Возможность отвечать на комментарии прямо из Telegram

В планах реализовать:

  • Поддержку уведомлений для Issue
  • Гибкую настройку правил уведомлений

Подробнее о возможностях

Бот работает на двух языках: русском и английском. При желании можно добавить другие локализации.

Мультиязычное приложение Spring Boot
Если вы делаете международное приложение, то вам необходимо перевести приложение на разные языки. Разбираемся, как сделать мультиязычное приложение.
  1. Уведомление о новых MR в проектах:
  • Название MR, кликнув на которое можно перейти в GitLab
  • Теги MR
  • Из какой ветки в какую
  • Автор MR

2. Уведомление о конфликте в вашем MergeRequests

3. Уведомление об обновлении MergeRequest

4. Уведомление об изменении статуса вашего MergeRequest: (MERGE, CLOSE, DELETE)

5. Уведомление о новых задачах в MergeRequest

6. Уведомление при упоминаниях в комментариях. Если в MR, который вы не отслеживаете, кто-то вас теганет в комментариях, то вам придет уведомление.

7. Уведомления при ответах в дискуссии, в которой вы писали.

8. Если вы поучаствовали в дискуссии (ветка комментариев), то вам будут приходить уведомления о новых сообщениях в этой дискуссии.

9. Киллер фича: Возможность отвечать на комментарии прямо из Telegram

Как все устроено внутри?

Весь код открыт, вы можете его изучить, если сомневаетесь в безопасности.

Вы запускаете приложение на своей локальной машине. С помощью GitLab API бот каждую минуту забирает данные о проектах, MR и прочем в базу данных, которую вы указываете при старте. Это необходимо, чтобы бот смог понять появились новые события, о которых стоит уведомить или нет.

Быстрый старт

Пока можно запустить бота только используя docker образ. В ближайшем будущем сделаю docker-compose и запуск через обычный Jar.

  1. Создаем бота в Telegram, который будет посылать вам уведомления. Делается это тут
  2. После создания вы получите токен, сохраните его. Пример: 34534050345:FlfrleflerferfRE-ergerFLREF9ERF-NGjM
  3. Теперь необходимо получить персональный токен в вашем GitLab. В правом верхнем углу нажмите на иконку своего аккаунта, далее Settings –> Personal Access Tokens. Укажите Scopes: api и нажмите Create a token.
  4. Создаем БД, в которой будут храниться данные бота.

Docker

Команда для запуска выглядит следующим образом:

sudo docker run --name gitlab-notify  \
  --env TELEGRAM_BOT_TOKEN=value \
  --env TELEGRAM_BOT_USERNAME=value \
  --env GITLAB_PERSONAL_TOKEN=value \
  --env TELEGRAM_PERSON_ID=value \
  --env GITLAB_URL=value \
  --env DATASOURCE_URL=jdbc:postgresql://localhost:5432/gitlab_bot \
  --env DATASOURCE_USERNAME=postgres \
  --env DATASOURCE_PASSWORD=value \
  --network="host" upagge/gitlab-telegram-notify:latest
  • TELEGRAM_BOT_TOKEN — токен, который вы получили при создание бота.
  • TELEGRAM_BOT_USERNAME — название, которое вы дали боту.
  • GITLAB_PERSONAL_TOKEN — токен, который вы получили в GitLab
  • TELEGRAM_PERSON_ID — ваш id в telegram, можно узнать у этого бота
  • GITLAB_URL — url на gitlab, локальный или облачный
  • DATASOURCE_URL — ссылка на базу данных Postgres, в следующем формате: jdbc:postgresql://localhost:5432/bitbucket_bot_local
  • DATASOURCE_USERNAME — пользователь БД
  • DATASOURCE_PASSWORD — пароль от БД