Введение
Jira — центральный инструмент для отслеживания задач в команде поддержки. Но стандартные уведомления Jira часто теряются в потоке email. Мы решили эту проблему, создав контейнеризированный Python-демон, который мониторит Jira API и отправляет умные оповещения в Telegram.
Подключение к Jira API
from jira import JIRA
def get_jira_client():
return JIRA(
server=“https://jira.example.com”,
basic_auth=(JIRA_USER, JIRA_TOKEN)
)
def get_urgent_issues(jira):
# JQL-запрос для неназначенных P1/P2 задач
jql = ('project = SUPPORT AND priority in (P1, P2) '
'AND status = Open AND assignee is EMPTY '
‘ORDER BY priority ASC, created DESC’)
return jira.search_issues(jql, maxResults=50)
Мониторинг задач
Демон периодически опрашивает Jira API, проверяя новые задачи, изменения статусов и просроченные SLA. Для каждого типа события формируется соответствующее уведомление с контекстом — приоритет, время в очереди, назначенный инженер.
Отправка оповещений в Telegram
Для разных уровней критичности используются разные каналы: P1-задачи отправляются в общий канал с mention ответственных, P2 — в рабочий чат, P3/P4 — в персональные уведомления назначенному инженеру.
async def send_alert(issue, alert_type):
message = format_alert(issue, alert_type)
channel = get_channel_for_priority(issue.fields.priority.name)
await bot.send_message(
chat_id=channel,
text=message,
parse_mode=“HTML”
)
Архитектура демона
Демон работает внутри Podman-пода вместе с Valkey для хранения состояния (какие задачи уже обработаны, когда было последнее оповещение). SSH-туннель к Jira запускается как sidecar-контейнер по паттерну эфемерных контейнеров.
Стратегия логирования
Структурированные JSON-логи содержат: timestamp, уровень, issue_key, alert_type, результат отправки. Логи выводятся в stdout контейнера и собираются через podman logs или journald. Ротация логов настроена через systemd.
Развёртывание с Podman-подами
# Создание пода
podman pod create --name jira-alert-pod -p 6379:6379
# Valkey для хранения состояния
podman run -d --pod jira-alert-pod --name valkey
docker.io/valkey/valkey:8
# Демон оповещений
podman run -d --pod jira-alert-pod --name alerter
-e JIRA_USER=bot@example.com
-e BOT_TOKEN=…
localhost/jira-alert-daemon:latest
Защита от дублирования
Valkey хранит хеш последних обработанных событий. Перед отправкой оповещения демон проверяет, не было ли оно уже отправлено. TTL на ключах автоматически очищает старые записи.
Заключение
Автоматизация Jira через Python и контейнеризированный демон позволяет создать надёжную систему оповещений, не зависящую от встроенных механизмов Jira. Podman-поды обеспечивают изоляцию и простоту развёртывания.