Уведомления от Bitbucket в Telegram

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.


Суть проекта


Когда я только устроился на первую работу разработчиком Java, сразу же возникла проблема уведомлений о событиях в Bitbucket. Направление Java разработки было новым (я был вторым программистом), поэтому среду для разработки пришлось настраивать мне. После установки и настройки Bitbucket Server приходилось шариться по Pull Request-ам в поисках новых комментариев, на которые нужно ответить, да и узнавать о новых Pull Reqest-ах было проблематично. Да, кто-то скажет, что есть email уведомления, но коммон, у нас же эпоха Telegram.


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


Абсолютно весь код open source, все библиотеки, которые я использую в проекте тоже open source. Весь проект вы сможете собрать самостоятельно при желании. В частности, я использую свои проекты, которые позволяют быстро создавать ботов для ВК и Telegram, когда-нибудь и об этих либах напишу статью, если будет интерес и время.


Так же все необходимые артефакты загружены в Maven Central.


Возможности


Если есть проблема, то нужно ее решать. Так появилась идея написать "очередного полезного" бота, который будет сообщать о новых Pull Request-ax (дальше PR). Но на этом эго функционал не ограничивается. В итоге локальная версия обладает следующим функционалом:


  • Уведомление о новых PR, в которых вас назначили ревьювером


  • Уведомление о конфликте в вашем PR


  • Уведомление об обновлении PR, в котором вы ревьювер (новые коммиты)


  • Уведомление об изменении статуса вашего PR (MERGE, DECLINE, DELETE)


  • Уведомление об изменениях решений ревьюверов, а так же добавлении или удалении ревьюверов



  • Уведомление о новых задачах в ваших PR


  • Уведомление о новых комментариях в ваших PR


  • Напоминания о просмотре PR. Это попытка создать умную систему уведомлений, которая будет ненавязчиво напоминать о том, что PR давно не просматривался. Например если прошло 2 часа, а вы так и не приняли решение, или если прошло уже 4 часа и кто-то вынес свое решение, а вы еще нет. Механизм еще будет дорабатываться.


Что за локальная версия? На данный момент есть две версии проекта, одна серверная, по задумке устанавливается на сервер компании, но самое главное она использует токен администратора, зачем это нужно объясню дальше. Вторая версия, о которой пойдет речь — локальная, которая запускается у вас на ПК и использует только ваш токен доступа, так как не у всех имеется возможность получить токен администратора. Так же в будущем планирую сделать версию для Bitbucket Cloud и возможно для Gitlab.


К сожалению, пока функционал локальной версии меньше, чем у серверной. Вот что пока не реализовано:


  • Уведомление о том, что ваша задача в чужом PR закрыта
  • Уведомление, если ваш логин упомянули в комментарии
  • Уведомление об ответах на ваши комментарии в любом PR

Так же серверная версия обладает настройками уведомлений о сборках в Teamcity!



Особенности реализации


Основной репозиторий тут


На самом деле в реализации ничего сверхестественного нет. Каждую минуту происходит опрос API с синхронизацией данных в БД, если находятся новые PR или другие события, то отправляется уведомление в Telegram. Хотя есть одна особенность именно у API Bitbucket.


C комментариями в API дела обстоят не очень, ну либо я не разобрался и найдется добрый человек, который раскурит их API и сделает по-человечески. Пришлось немного наколхозить в серверной версии, чтобы была возможность находить комментарии и задачи. И для этого нужен токен администратора Bitbucket.


Так же стоит отметить, что сущность комментария и задачи это одно и то же. В API они отличаются только флагами, так вот решили разработчики Bitbucket Server. И на данный момент нет возможности просто взять и получить все комментарии или задачи.


Приходится брать id последнего известного комментария-задачи, добавлять ему единицу, после чего проходить по всем PR, чтобы узнать не появился ли в PR такой комментарий. И для этого необходим токен администратора Bitbucket, так как приходится проходить по всем репозиториям, по всем PR, а у простого пользователя может не быть доступа ко всем репозиториям и тогда весь механизм перестает работать.


Именно из-за этого в локальной версии бота все сделано немного по другому. У PR есть три поля, два из которых это количество комментариев и открытые задачи, а третье это совсем другая история. Именно по этим полям проверяется факт появления новых комментариев-задач, после чего вам отправляется уведомление.


Довольно лирики, о технической реализации я напишу отдельную статью на примере серверной версии, кроме того, вы можете изучить код самостоятельно. Теперь переходим к тому, как же запустить бота локально у себя на ПК.


Запускаем проект


Самый простой способ это использовать готовый докер образ. Напоминаю, что можно полностью собрать проект самостоятельно при желании.


  1. Скачиваем docker образ

    docker pull upagge/bitbucket-bot-local:latest
  2. Создаем бота в Telegram, который будет посылать вам уведомления. Делается это тут
  3. После создания вы получите токен, сохраните его. Пример: 34534050345:FlfrleflerferfRE-ergerFLREF9ERF-NGjM
  4. Теперь необходимо получить персональный токен в вашем bitbucket. В правом верхнем углу нажмите на иконку своего аккаунта, далее Manage Account --> Personal access tokens --> Create a token. Достаточно токена на чтение. Сохраните его
  5. Создаем БД, в которой будут храниться PR и ревьюверы к ним.
  6. Можно приступать к запуску

docker run --name bitbucketbot -d --env TELEGRAM_BOT_TOKEN=value --env TELEGRAM_BOT_USERNAME=value --env BITBUCKET_TOKEN=value --env TELEGRAM_ID=value --env BITBUCKET_URL=value --env BITBUCKET_LOGIN=value --env DATASOURCE_URL=value --env DATASOURCE_USERNAME=value --env DATASOURCE_PASSWORD=value --network="host" upagge/bitbucket-bot-local:latest

Вместо value подставляем свои значения. Ниже приведена расшифровка для каждого параметра:


  • TELEGRAM_BOT_TOKEN — токен, который вы получили при создание бота.
  • TELEGRAM_BOT_USERNAME — название, которое вы дали боту. Пример my_bitbucket_bot
  • BITBUCKET_TOKEN — токен, который вы получили в Bitbucket
  • TELEGRAM_ID — ваш id в telegram, можно узнать у этого бота
  • BITBUCKET_URL — url на ваш bitbucket строго в таком формате http://localhost:7990
  • BITBUCKET_LOGIN — ваш логин в bitbucket, например mylogin
  • DATASOURCE_URL — ссылка на базу данных Postgres, в следующем формате: jdbc:postgresql://localhost:5432/bitbucket_bot_local
  • DATASOURCE_USERNAME — пользователь БД
  • DATASOURCE_PASSWORD — пароль от БД
Источник: https://habr.com/ru/post/528856/


Интересные статьи

Интересные статьи

По своей сути 2FA должен защищать учетную запись от несанкционированного доступа при критически-важных действиях с ней. Но почему-то он не используется при копировании па...
Рождение идеи Все мы помним такие легендарные MMORPG нулевых, как Lineage 2, World of Warcraft, Aion, Perfect World. Мы растем, жизненные приоритеты меняются — работа, семья, друзья. И уже не мо...
VUE.JS - это javascript фрэймворк, с версии 18.5 его добавили в ядро битрикса, поэтому можно его использовать из коробки.
Если честно, к Д7 у меня несколько неоднозначное отношение. В некоторых местах я попискиваю от восторга, а в некоторых хочется топать ногами и ругаться неприличными словами.
Основатель digital-агентства Роман Квартальнов делится простым решением, которое помогло сделать производственные процессы прозрачными, дало возможность в любой момент времени оценить себестоимо...