Pull to refresh

Синхронизируем уведомления CI с Telegram

Reading time 3 min
Views 23K
Cегодня я хотел бы поделиться своим опытом синхронизации уведомлений Continuous Integration серверов (Bamboo, Jenkins, TeamCity и тп.) с бесплатным мессенджером от Павла Дурова — Telegram.

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

Для организации данной синхронизации мы будем использовать BOT API от телеграмма, Gmail API от Google, а также наш ubuntu сервер на Digital Ocean.

Для начала нам нужно создать нового бота в телеграмм. Для этого я рекомендую воспользоваться пунктом 1 из вот этой статьи: habrahabr.ru/post/262247. После регистрации мы получаем данные доступа к нашему боту вида: 112714817:AAEwZWoZ6X1Go76gt3_hUz9717ihNboXrnw

Обязательно запоминаем эти данные — они нам ещё пригодятся!



Далее, нам нужно создать новый чат, в который и будет отсылать уведомления наш бот. Создаем и не забываем пригласить в него бота и ваших коллег. Теперь нам обязательно нужно узнать ID этого чата, для чего посылаем в чат любое тестовое сообщение, а затем в браузере или сurl (что кому удобнее) вбиваем:
https://api.telegram.org/bot<TOKEN>/getUpdates



Из ответа сервера мы узнаем, что ID нашего чата — «-35576913» (учтите, что «-» — это часть ID, терять его нельзя). Теперь проверяем, что все работает правильно. Для этого пытаемся отправить с нашего бота тестовое сообщение:
https://api.telegram.org/bot<TOKEN>/sendMessage?chat_id=-35576913&text=Test_Message



Отлично: мы получили наше тестовое сообщение, а значит все работает как надо! Теперь плавно переходим к Gmail API. Для начала нам нужно создать новый проект в console.developers.google.com. После чего выдаем нашему проекту доступ к Gmail API. А затем нам необходимо получить JSON с креденшелами нашего нового проекта:





Отлично, почти все готово! Теперь я предлагаю воспользоваться моим скриптом на python. Взять его можно здесь: github.com/egorvas/ci_to_telegram/blob/master/ci_to_telegram.py

Также необходимо будет поставить два сторонних python модуля:
pip install google-api-python-client
pip install requests

Вам нужно положить файлик с client_secret.json в ту же папку, что и скрипт, и запустить выполнение, после чего откроется браузер и предложит вам разрешить доступ к gmail почте.



Я для нашего проекта создал новый gmail аккаунт, к которому и привязал уведомления с bamboo, но вы можете использовать уже созданный. Как душа пожелает!

Не забываем проверить, что уведомления с CI приходят на эту почту. Теперь в папке со скриптом, помимо client_secret.json, должна лежать папка credentials. Если все так, значит вы сделали верно.



Теперь нам нужно немного видоизменить скрипт, для этого меняем переменные TELEGRAM_BOT_CREDENTIALS и CHAT_ID на те, что мы узнали выше. Теперь пробуем выполнить скрипт, и, если все правильно, то в чат с вашим ботом должны упасть все непрочитанные письма.

В двух словах о том, что делает скрипт. Сначала он находит все непрочитанные письма в вашем почтовом ящике, затем он отправляет текст от них к вам в телеграмм, а далее — делает эти письма прочитанными.

Остался самый последний шаг: нам нужно организовать повторяющийся запуск этого скрипта. Я использовал cron на нашем ubuntu сервере. Грузим нашу папку со скриптами по ssh на сервер и настраиваем cron:

Для начала устанавливаем cron:
sudo apt-get update
sudo apt-get install cron

Затем запускаем редактор настроек cron:
crontab -e

Добавляем повторение нашего скрипта через каждую минуту:
* * * * python /usr/share/telegram/ci_to_telegram.py>

Проверяем, что все сохранилось корректно:
crontab -l

Теперь наш скрипт запускается каждую минут. Если новых писем на почте нет, то он ничего не делает. А в ином случае — отправляет текст письма к вам в телеграмм и делает письмо прочитанным.

На этом все. Спасибо за внимание. Если будут вопросы — пишите, с радостью отвечу.
Tags:
Hubs:
+4
Comments 7
Comments Comments 7

Articles