Нещодавно за наводкою одного товариша стали в компанії використовувати Slack. Тут же постало питання про інтеграцію його з Jira. Треба сказати, що Slack номінально має інтеграцію з Jira з коробки, однак на повірку виявилося, що вона обробляє далеко не всі події, ніяк не налаштовується і взагалі працює не так, як хотілося б. Тому було прийнято рішення написати свою інтеграцію на php.
Вимоги були сформовані наступним чином:
- Повинна бути обробка всіх значущих подій Jira-завдання (Створення, Оновлення, Видалення, Призначення на користувача)
- Повинна бути можливість розвести події від різних проектів по різних каналах
- Повинна бути можливість направляти користувачеві особисте повідомлення при призначенні на нього завдання
Була зроблена спроба знайти готовий обробник запитів від JiraWebHook і адекватні php-класи для роботи з SlackAPI. Однак жодне рішення не сподобалося і було прийнято рішення зробити все повністю самостійно.
Що вийшло - власне, ось.
Тепер пару слів про те, що всередині.
Все складається з трьох класів:
- JiraH^ Receiver - отримує дані з Jira;
- SlackWebh^ Sender - відправляє дані в Slack (на стороні Slack було вирішено використовувати для прийому повідомлень IncomingHook integration як найпростішу, але відповідальну всім поставленим вимогам);
- JiraSlackIntegration - клас, який реалізує власне логіку обробки подій і надсилання повідомлень.
Розгортається просто:
- Клонує сховище або копіює файли;
- Корінь вузла надіслати до теки www;
- Створити теку для log-файлів у теці www (за замовчуванням www/logs) і дати права на запис для користувача, під яким виконується скрипт;
- Додати в Slack інтеграцію «IncomingHook» і прописати отриманий URL в клас JiraSlackIntegration class (рядок 14);
- Додати до Jira новий WebHook з URL хосту;
- Встановити необхідні параметри $ projec^ ToChannels і $ jiraUsersToSlack у JiraSlackIntegration.
Ось, власне, і все. Можливо це комусь знадобиться. Буду радий зауваженням-доповненням.
Дякую!
