Недавно по наводке одного товарища стали в компании использовать Slack. Тут же встал вопрос об интеграции его с Jira. Надо сказать, что Slack номинально имеет интеграцию с Jira из коробки, однако на поверку оказалось, что она обрабатывает далеко не все события, никак не настраивается и вообще работает не так, как хотелось бы. Поэтому было принято решение написать свою интеграцию на php.

Требования были сформированы следующим образом:
  • Должна быть обработка всех значимых событий Jira-задачи (Создание, Обновление, Удаление, Назначение на пользователя)
  • Должна быть возможность развести события от разных проектов по разным каналам
  • Должна быть возможность направлять пользователю личное сообщение при назначении на него задачи

Была предпринята попытка найти готовый обработчик запросов от JiraWebHook и адекватные php-классы для работы с SlackAPI. Однако ни одно решение не понравилось и было принято решение сделать все полностью самостоятельно.
Что получилось – собственно, вот.
Теперь пару слов о том, что внутри.

Все состоит из трех классов:
  • JiraHookReceiver – получает данные из Jira;
  • SlackWebhookSender – отправляет данные в Slack (на стороне Slack было решено использовать для приема сообщений IncomingHook integration как самую простую, но отвечающую всем поставленным требованиям);
  • JiraSlackIntegration – класс, реализующий собственно логику обработки событий и отправки сообщений.

Разворачивается просто:
  • Клонируется репозиторий или копируются файлы;
  • Корень хоста направить в папку www;
  • Создать папку для log-файлов в папке www (по умолчанию www/logs) и дать права на запись для пользователя, под которым выполняется скрипт;
  • Добавить в Slack интеграцию «IncomingHook» и прописать полученный URL в класс JiraSlackIntegration class (строка 14);
  • Добавить в Jira новый WebHook с URL хоста;
  • Установить необходимые настройки $projectsToChannels и $jiraUsersToSlack в классе JiraSlackIntegration.

Вот, собственно, и все. Возможно это кому-то понадобится. Буду рад замечаниям-дополнениям.

Спасибо!

Комментарии (4)


  1. GooRoo
    13.07.2015 21:29
    +1

    Помню, во времена ХабраТорта авторы статей хотя бы кусок кода в статью вставляли для приличия, чтоб не так палевно было пиарить свой пет-проект двухмесячной давности.


    1. xRay
      13.07.2015 22:03
      +1

      Код на месте. Репозитарий на github.com есть по ссылке.
      Хотя да можно было менее лаконично статью написать.


  1. aivus
    14.07.2015 10:59
    +1

    Мы тут тоже делали себе:
    github.com/malavsky/jira-slack

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


  1. aivus
    14.07.2015 11:05

    Прошелся по коду, вижу целую кучу ссылок на «plusonedev.atlassian.net» прямо внутри классов.
    В текущей реализации повторно использовать эту интеграцию не выйдет. Другим пользователям прийдется просматривать и редактировать все файлы.