Задний план

Atlassian JIRA Agile — важная часть того, как мы создаем программное обеспечение здесь, в Opsview. У нас часто одновременно работает несколько проектов, а это означает, что нужно отслеживать множество обменов информацией. Один из важнейших элементов коммуникации, который часто упускают наши команды, — это назначение историй, дефектов и задач. JIRA пытается исправить это с помощью своего стандартного метода связи (электронной почты), который работает для некоторых, но не для многих из нас. Электронная почта может быть слишком агрессивной, а предупреждения JIRA кажутся неправильной информацией для наших почтовых ящиков. Это также становится устаревшим методом получения уведомлений.

Попытка исправить недостатки электронной почты — это то, где Slack приходит на помощь. Он штурмом взял наш офис и не зря; его стильный дизайн и множество интеграций делают все намного эффективнее. Это также дало нам идею использовать его для уведомления друг друга о том, когда мы назначаем задачи друг другу. Slack идеально подходит для случайных уведомлений, поскольку мы уже получаем так много от разных коллег и каналов.

Как мы внедрили Jira Slackbot

Поскольку Slack настолько популярен, что существуют SDK практически для любого языка. Я большой поклонник Node.js, поэтому мы решили использовать его. Боту нужно было сделать несколько вещей, и они стали требованиями к проекту:

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

С установленными требованиями я приступил к работе. Первым элементом было создание сервера для приема входящих веб-перехватчиков от JIRA и запуска стороны приложения OAuth2 для получения токена для взаимодействия со Slack. Я выбрал стандартный для отрасли Express.js и настроил два маршрута для прослушивания: запрос POST к `/jira-webhook` и запрос GET к `/redirect` . Запрос POST прослушивает сообщения от JIRA. JIRA отправляет массивную полезную нагрузку JSON с каждым веб-хуком с объемами данных об изменении. Отсюда я мог извлечь всю необходимую информацию.

Предварительно также нужно было проработать, что это за тип оповещения. С помощью простого переключателя для проверки содержимого `issue_event_type_name` и запуска кода уведомления, когда оно `'issue_assigned'`, я смог легко добавить поддержку для другие события в будущем.

Как только я узнал, что что-то было назначено, я мог разобрать полезную нагрузку JSON, чтобы понять, что это такое и кого уведомлять. Сначала я использовал фантастический синтаксис шаблонов ES6 для создания строки для отправки получателю:

`${response.user.displayName} только что назначил вам ${response.issue.key} (${changelog.toString}) — https://opsview.atlassian.net/browse/${response .issue.key}`.

Включение URL-адреса помогает людям сэкономить время, пытаясь найти его в своей очереди или на доске проекта.

Следующим шагом было проверить, были ли какие-либо комментарии к задаче за последние 15 минут, и если они были, пометить их тегом в сообщении. Это помогает добавить контекст к тому, почему задача выдается им, и избавляет от необходимости спрашивать ответственного за то, почему им была назначена задача.

Далее важно быстро проверить, чтобы убедиться, что вы не получаете уведомление, когда назначаете что-то себе — некоторые хотели получать уведомления в этом случае, но мы решили, что это может сбить с толку новых пользователей. Последнее, что нужно сделать, это найти пользователя в каталоге Slack на основе его адреса электронной почты JIRA. Я перечислил пользователей в каталоге и сравнил адрес электронной почты, который у нас есть, с каждым, пока не было найдено совпадение, используя соответствующий идентификатор пользователя, чтобы связаться с ними в Slack. Вот и все. Пинг. Получатель получает сообщение в своем чате Slackbot от нашего бота, сообщающее ему, что происходит.

Это был небольшой, но веселый и полезный проект, поскольку он дал нам возможность повысить производительность в результате недовольства, которое у нас было по поводу того, как мы сообщаем об изменениях в JIRA. Мы надеемся добавить больше поддержки для других событий в будущем, и мы попытались создать бота таким образом, чтобы каждый мог его использовать!

Если вы хотите проверить исходный код и попробовать его для своего проекта JIRA, он находится на нашем GitHub. Оставайтесь с нами, скоро на GitHub появится больше проектов!

Эта статья написана Робом Калкрофтом, разработчиком компании Opsview, ведущего поставщика программного обеспечения для мониторинга локальной инфраструктуры, приложений и облачных сервисов