[Java] Уведомления от Bitbucket в Telegram
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Суть проекта
Когда я только устроился на первую работу разработчиком 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 есть три поля, два из которых это количество комментариев и открытые задачи, а третье это совсем другая история. Именно по этим полям проверяется факт появления новых комментариев-задач, после чего вам отправляется уведомление.
Довольно лирики, о технической реализации я напишу отдельную статью на примере серверной версии, кроме того, вы можете изучить код самостоятельно. Теперь переходим к тому, как же запустить бота локально у себя на ПК.
Запускаем проект
Самый простой способ это использовать готовый докер образ. Напоминаю, что можно полностью собрать проект самостоятельно при желании.
- Скачиваем docker образ
docker pull upagge/bitbucket-bot-local:latest
- Создаем бота в Telegram, который будет посылать вам уведомления. Делается это тут
- После создания вы получите токен, сохраните его. Пример: 34534050345:FlfrleflerferfRE-ergerFLREF9ERF-NGjM
- Теперь необходимо получить персональный токен в вашем bitbucket. В правом верхнем углу нажмите на иконку своего аккаунта, далее Manage Account --> Personal access tokens --> Create a token. Достаточно токена на чтение. Сохраните его
- Создаем БД, в которой будут храниться PR и ревьюверы к ним.
- Можно приступать к запуску
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 — пароль от БД
===========
Источник:
habr.com
===========
Похожие новости:
- [Open source, Виртуализация, Читальный зал, Openshift] 4 книги по цифровой трансформации для тимлидов, шпаргалка по Quarkus & Observability…
- [Разработка веб-сайтов, JavaScript, Программирование] JavaScript: что нас ждет в следующем году
- [Разработка под Android, Интервью] Android-разработка: что общего с Lego и как не «натягивать сову на глобус»
- [Разработка веб-сайтов, JavaScript, HTML, Расширения для браузеров] Растянуть видео в браузере
- [Java, Kotlin, Конференции] Lamoda x Joker 2020
- [JavaScript, Google Chrome, Расширения для браузеров, Браузеры] Расширения для Google Chrome, без которых вы уже не сможете представить свою работу
- [Firefox, Браузеры] В Firefox 83 внедрили режим «только HTTPS»
- [Java] Spring Security — пример REST-сервиса с авторизацией по протоколу OAuth2 через BitBucket и JWT
- [Oracle, Java, Карьера в IT-индустрии] Мой путь к получению Oracle Certified Associate и Oracle Certified Professional
- [Конференции] NX QA Meetup #14: (Не)адекватное code review автотестов и тестирование модуля расчета прав
Теги для поиска: #_java, #_java, #_telegram, #_bot, #_telegram_bot, #_bitbucket, #_bitbucket_server, #_java
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 11:44
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Суть проекта Когда я только устроился на первую работу разработчиком Java, сразу же возникла проблема уведомлений о событиях в Bitbucket. Направление Java разработки было новым (я был вторым программистом), поэтому среду для разработки пришлось настраивать мне. После установки и настройки Bitbucket Server приходилось шариться по Pull Request-ам в поисках новых комментариев, на которые нужно ответить, да и узнавать о новых Pull Reqest-ах было проблематично. Да, кто-то скажет, что есть email уведомления, но коммон, у нас же эпоха Telegram. disclaimer: проект был написан для личных нужд и еще разрабатывается, но вроде все стабильно, но это не точно, так что возможны баги и "неочевидное поведение", буду рад получить обратную связь в issues. Абсолютно весь код open source, все библиотеки, которые я использую в проекте тоже open source. Весь проект вы сможете собрать самостоятельно при желании. В частности, я использую свои проекты, которые позволяют быстро создавать ботов для ВК и Telegram, когда-нибудь и об этих либах напишу статью, если будет интерес и время. Так же все необходимые артефакты загружены в Maven Central. Возможности Если есть проблема, то нужно ее решать. Так появилась идея написать "очередного полезного" бота, который будет сообщать о новых Pull Request-ax (дальше PR). Но на этом эго функционал не ограничивается. В итоге локальная версия обладает следующим функционалом:
Что за локальная версия? На данный момент есть две версии проекта, одна серверная, по задумке устанавливается на сервер компании, но самое главное она использует токен администратора, зачем это нужно объясню дальше. Вторая версия, о которой пойдет речь — локальная, которая запускается у вас на ПК и использует только ваш токен доступа, так как не у всех имеется возможность получить токен администратора. Так же в будущем планирую сделать версию для Bitbucket Cloud и возможно для Gitlab. К сожалению, пока функционал локальной версии меньше, чем у серверной. Вот что пока не реализовано:
Так же серверная версия обладает настройками уведомлений о сборках в Teamcity! Особенности реализации Основной репозиторий тут На самом деле в реализации ничего сверхестественного нет. Каждую минуту происходит опрос API с синхронизацией данных в БД, если находятся новые PR или другие события, то отправляется уведомление в Telegram. Хотя есть одна особенность именно у API Bitbucket. C комментариями в API дела обстоят не очень, ну либо я не разобрался и найдется добрый человек, который раскурит их API и сделает по-человечески. Пришлось немного наколхозить в серверной версии, чтобы была возможность находить комментарии и задачи. И для этого нужен токен администратора Bitbucket. Так же стоит отметить, что сущность комментария и задачи это одно и то же. В API они отличаются только флагами, так вот решили разработчики Bitbucket Server. И на данный момент нет возможности просто взять и получить все комментарии или задачи. Приходится брать id последнего известного комментария-задачи, добавлять ему единицу, после чего проходить по всем PR, чтобы узнать не появился ли в PR такой комментарий. И для этого необходим токен администратора Bitbucket, так как приходится проходить по всем репозиториям, по всем PR, а у простого пользователя может не быть доступа ко всем репозиториям и тогда весь механизм перестает работать. Именно из-за этого в локальной версии бота все сделано немного по другому. У PR есть три поля, два из которых это количество комментариев и открытые задачи, а третье это совсем другая история. Именно по этим полям проверяется факт появления новых комментариев-задач, после чего вам отправляется уведомление. Довольно лирики, о технической реализации я напишу отдельную статью на примере серверной версии, кроме того, вы можете изучить код самостоятельно. Теперь переходим к тому, как же запустить бота локально у себя на ПК. Запускаем проект Самый простой способ это использовать готовый докер образ. Напоминаю, что можно полностью собрать проект самостоятельно при желании.
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 подставляем свои значения. Ниже приведена расшифровка для каждого параметра:
=========== Источник: habr.com =========== Похожие новости:
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 11:44
Часовой пояс: UTC + 5