Синхронизация Уведомлений Ci С Telegram

Сегодня я хотел бы поделиться своим опытом синхронизации уведомлений с серверов Continuous Integration (Bamboo, Jenkins, TeamCity и т.д.) с бесплатным мессенджером от Павла Дурова — Telegram. Мы хотели решить эту проблему, потому что программисты нашего проекта не отвечали на уведомления, отправленные по электронной почте, а мы пользуемся корпоративным мессенджером Telegram. Подопытным CI является наш корпоративный Bamboo, от которого должны приходить эти самые уведомления.

Для организации этой синхронизации мы будем использовать BOT API от Telegram, Gmail API от Google, а также наш сервер Ubuntu в Digital Ocean. Во-первых, нам нужно создать нового бота для Telegram. Для этого рекомендую воспользоваться пунктом 1 из этой статьи: habrahabr.ru/post/262247 .

После регистрации мы получаем данные доступа к нашему боту вида: 112714817:AAEwZWoZ6X1Go76gt3_hUz9717ihNboXrnw Обязательно запомните эти данные — они нам понадобятся позже!

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

Далее нам нужно создать новый чат, в который наш бот будет отправлять уведомления.

Создаем и не забываем пригласить в него бота и своих коллег.

Теперь нам обязательно нужно узнать ID этого чата, для чего отправляем в чат любое тестовое сообщение, а затем в браузере или лоре (как вам удобнее) вводим:

  
  
  
  
  
  
   

https://api.telegram.org/bot <TOKEN>/getUpdates



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

Из ответа сервера мы узнаем, что наш идентификатор чата — «-35576913» (обратите внимание, что «-» — это часть идентификатора, потерять его нельзя).

Теперь проверим, что всё работает корректно.

Для этого пытаемся отправить тестовое сообщение от нашего бота:

https://api.telegram.org/bot <TOKEN>/sendMessageЭchat_id=-35576913&text=Test_Message



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

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

Затем мы предоставляем нашему проекту доступ к API Gmail. И затем нам нужно получить JSON с учетными данными нашего нового проекта:

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



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

Отлично, почти готово! Теперь я предлагаю использовать мой скрипт 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.

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

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

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

Если все так, то вы все сделали правильно.



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

Теперь нам нужно немного доработать скрипт; для этого меняем переменные 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

Теперь наш скрипт выполняется каждую минуту.

Если новых писем на почте нет, то он ничего не делает. В противном случае он отправляет вам текст письма через Telegram и заставляет письмо читаться.

Вот и все.

Спасибо за внимание.

Если будут вопросы, пишите, буду рада ответить.

Теги: #программирование #ci #bamboo #jenkins #Telegram #уведомления #уведомления #программирование #Google API

Вместе с данным постом часто просматривают: