Jira

Трекеры задач · издатель buff · версия 1.4.4

Задачи, вопросы и ответы прямо в тикетах Jira Data Center и self-hosted Server — не выходя из трекера, в котором уже работает команда.

Скачать коннектор Как установить2 из 3 инструментов только читают
  • Ответ приходит комментарием в тот же тикет — со ссылкой на документ и на задачу.
  • Что интеграция получит, видно в каталоге коннектора до установки.
  • Форма настройки строится по схеме, которую интеграция объявляет о себе.
  • Подключение работает: свой процесс, свой набор инструментов, свой разрешённый адрес.
  • Проверка связи говорит не «ок», а версию Jira и под каким аккаунтом вошли.
  • Приёмник событий — у коннектора: один адрес на все подключения.
  • У подключения только выключатель; ссылку для трекера выдаёт коннектор.
  • В приложении видно, что коннектор запустил и какие инструменты отдал модели.

Нажмите на снимок, чтобы открыть его целиком. Все снимки — с работающей установки.

Обзор

Интеграция связывает Buff с вашей Jira изнутри вашей же сети. Команда продолжает ставить задачи и задавать вопросы там, где привыкла: в тикете. Buff читает тикет, заводит по нему задачу разработки, а ответ возвращает комментарием в тот же тикет — со ссылкой на результат.

Сценарии

Ситуации, ради которых его ставят.

  • Вопрос по коду, не выходя из тикета

    Тестировщик завёл тикет «экспорт в CSV ломается на кириллице» и не знает, где копать. Он упоминает бота в комментарии и просит разобраться.

    Результат. Через несколько минут в тикете лежит разбор: где формируется выгрузка, почему теряется кодировка и что придётся менять. Никто не заводил задачу и не переключался в другой интерфейс.

  • Задача разработки прямо из тикета

    Продакт описал доработку в тикете — с обсуждением на десять комментариев, где половина требований появилась по ходу. Обычно постановку приходится переписывать заново.

    Результат. Buff читает тикет целиком, вместе с комментариями и историей, и заводит по нему задачу разработки. Ссылка на задачу возвращается в тикет, так что трекер остаётся единственным местом, где команда смотрит статус.

  • Это уже было — найти, где именно

    Пришло обращение, подозрительно похожее на прошлогоднее. Искать вручную по JQL долго, а помнит его только тот, кто в отпуске.

    Результат. Интеграция ищет по отмеченным проектам и приносит связанные тикеты: дубликаты, прошлые обращения по той же подсистеме и задачи, на которые опирается текущая — с ссылками.

  • Ответ там, где его ждут

    Заказчик задачи не заходит в интерфейс Buff и не собирается. Ему нужен ответ в тикете, который он открыл.

    Результат. Готовый разбор или ссылка на pull request приходит комментарием в исходный тикет. Единственный инструмент интеграции, который что-то пишет, — и он недоступен на стадиях, где модель только читает.

Примеры

Что написать и что придёт в ответ. Обращение к боту задаётся в настройках подключения — здесь это «@buff».

  1. @buff, найди в истории тикеты по проблеме кеширования

    комментарий в любом тикете отмеченного проекта

    инструмент: search_issues

    Нашёл 4 тикета по кешированию: • PROJ-218 «Кеш каталога не сбрасывается после смены цены» — закрыт 12.03, исправление в CacheWarmer • PROJ-341 «Пустые ответы /search первые 30 секунд после деплоя» — закрыт 04.06, прогрев кеша • OPS-77 «Redis выедает память на выгрузках» — открыт, обсуждение про TTL • PROJ-402 «Дубли в выдаче после инвалидации» — открыт, похож на текущий

  2. @buff, разберись, почему при экспорте в CSV ломается кириллица

    комментарий в самом тикете с проблемой

    инструмент: get_issue + инструменты по коду

    Прочитал тикет целиком, вместе с обсуждением, и разобрал по коду. Выгрузка собирается в ExportService.buildCsv, файл отдаётся без BOM и с заголовком text/csv без charset — Excel в Windows читает такой файл в cp1251. Разбор с местами в коде приложил документом и продублировал ссылкой сюда.

  3. @buff, заведи по этому тикету задачу разработки

    комментарий в тикете

    инструмент: get_issue

    Задача заведена: в неё перенесены описание, требования, всплывшие в комментариях, и ограничения из истории изменений. Ссылка на задачу — в ответном комментарии, так что статус видно, не выходя из трекера.

  4. @buff, research разберись, откуда берётся задержка в отчёте

    комментарий в тикете — так запускается глубокое исследование

    инструмент: get_issue

    Слово после обращения выбирает работу: без него — короткий ответ, «research» — глубокое исследование с документом, «task» — черновик задачи разработки. Работа начинается только по прямому обращению: метка или смена поля бота не запускают — их ставят правила и массовые правки, а не человек, который решил заказать работу.

  5. @buff, что уже обсуждали в этом тикете?

    комментарий в тикете с длинной перепиской

    инструмент: get_issue

    Краткая выжимка обсуждения: что просили изначально, какие требования добавились по ходу (и в каком комментарии), о чём договорились и что осталось нерешённым. Полезно, когда тикету полгода и в нём тридцать комментариев.

Что умеет

Читает тикет целиком, а не заголовок

Инструмент get_issue отдаёт модели описание, комментарии и историю изменений тикета. Это то, из чего складывается настоящая постановка: в заголовке «не работает поиск», а в третьем комментарии — что именно и на каких данных. Инструмент только читает.

Ищет по проекту

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

Отвечает в тикете

add_comment пишет ответ в исходный тикет: разбор вопроса, ссылку на задачу разработки или на готовый pull request. Это единственный инструмент интеграции, который что-то меняет, — и он недоступен на стадиях, где модель только читает.

Слышит, когда его зовут

Интеграция сама следит за отмеченными проектами и приносит коннектору всё, что адресовано боту: упоминание в комментарии, снятие метки, назначение задачи. Опрос идёт по расписанию и не требует открытых портов — в закрытом периметре это единственный работающий вариант. Если трекеру есть куда стучаться, вызов доходит сразу: коннектор принимает его, проверяет секрет и подпись и отдаёт ей уже проверенное тело.

Не отвечает дважды на один вопрос

Каждое событие несёт собственный идентификатор и время. Коннектор сдвигает отметку прочитанного только за теми событиями, которые действительно доставил, а платформа отклоняет повторы по идентификатору. Перезапуск агента, потеря связи и повторный опрос не превращаются во второй ответ в тикете.

Берётся за работу только по обращению

Работу запускает прямое обращение — упоминание бота в комментарии («@buff, посмотри») в проектах, которые вы отметили. Метка или смена поля не запускают ничего: их ставят правила маршрутизации, массовые правки и автоматика самого трекера, и работа, которую никто не заказывал, всё равно была бы оплачена. Назначение тикета на учётную запись бота — тоже обращение, но и оно бывает автоматическим, поэтому включается отдельной настройкой. Список отмеченных проектов и есть контроль доступа: внутри них позвать бота может любой участник, за их пределами — никто.

Как пользоваться

Всё происходит на машине, где стоит коннектор. Открывать доступ к вашей сети снаружи не нужно ни на одном шаге.

  1. Шаг 1

    Установка занимает одно нажатие

    Откройте раздел «Маркетплейс» на локальной странице коннектора. До установки видно, что интеграция получит: адреса, по которым она сможет ходить, какие учётные данные попросит, будет ли принимать вебхуки и сколько инструментов увидит модель. Нажимаете «Установить» — коннектор скачивает подписанный бандл из нашего реестра и проверяет подпись до того, как что-то запишет на диск.

    Коннектор
    Маркетплейс в коннекторе: границы доступа видны до установки.
  2. Шаг 2

    Настройка — форма из самой интеграции

    Дальше добавляется подключение: адрес вашей Jira, ключи проектов, обращение к боту и токен. Форма не написана нами под Jira — она построена по схеме, которую интеграция объявляет о себе, поэтому у любой из них настройка выглядит одинаково понятно. Токен остаётся в коннекторе: интеграция его не видит, коннектор сам подставляет его в исходящие запросы.

    Коннектор
    Форма настройки строится по схеме интеграции, а не пишется под каждую из них.
  3. Шаг 3

    То же самое из командной строки

    Установка без графики равноправна, а не запасной вариант: `connector install jira`, затем `connector instance add jira --config base_url=… --config project_keys=PROJ`. На сервере без иксов вы делаете то же самое и получаете тот же результат.

  4. Шаг 4

    Версия подключения не меняется сама

    Подключение закреплено за конкретной версией интеграции. Новая версия появляется в каталоге и ждёт: обновление — это ваше действие, а не наше. При обновлении коннектор сначала проверяет, что уже введённые настройки подходят новой версии, и отказывается, называя недостающее поле, — вместо того чтобы сломать работающую интеграцию кнопкой «обновить».

  5. Шаг 5

    Машина без интернета

    Если у машины нет выхода наружу вообще, каталог и бандлы переносятся файлами: подписанный комплект собирается там, где сеть есть, и кладётся на носитель. Проверка подписи при установке та же самая — именно ради такого переноса она и нужна. Как вариант, весь реестр можно зеркалировать к себе в Harbor или Nexus и указать коннектору на зеркало.

  6. Шаг 6

    Несколько Jira — несколько подключений

    Одна и та же Jira для разных проектов или две разные Jira — это два подключения одной интеграции. У каждого свои учётные данные, свой список проектов и свой отдельный процесс под собственным пользователем ОС. Переименование ничего не ломает: подключение живёт под идентификатором, а не под названием.

    Коннектор
    Каждое подключение — отдельный процесс со своим набором инструментов.
  7. Шаг 7

    События приходят сами

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

    Коннектор
    У подключения — выключатель и выданная ссылка, а не поля адреса.

Границы доступа

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

Ходит наружу

только по адресам из полей base_url

Учётные данные

api — значения остаются в коннекторе, интеграция их не видит

Вебхуки

deliver — порт открываете вы, по желанию

Инструменты, которые увидит модель: 3, из них только читают 2. Пишущие недоступны на стадиях, где модель только читает, — и проверяет это коннектор у себя.
ИнструментЧто делаетДоступ
search_issuesНайти тикеты по JQL — когда в задаче упомянут ключ или нужен контекст из трекератолько чтение
get_issueПрочитать тикет целиком с комментариями — когда нужен текст требований или обсуждениетолько чтение
add_commentНаписать комментарий в тикетпишет

Интеграция работает отдельным процессом под собственным пользователем операционной системы: она не видит ключа коннектора, не читает файлы других подключений и не может выйти в сеть мимо коннектора. Подробнее — в разделе о безопасности.

Требования

  • Jira Data Center или self-hosted Server. Jira Cloud пока не поддерживается.
  • Personal Access Token (Jira 8.14 и новее) или логин с паролем для старых Server.
  • Сетевой доступ от машины с коннектором до Jira — наружу из вашей сети ничего открывать не нужно.
  • Коннектор, запущенный с правом заводить отдельного пользователя ОС для интеграции (root или CAP_SETUID).

Вопросы

Токен Jira уходит к вам в облако?
Нет. Он хранится на машине с коннектором и не покидает её. Интеграция тоже его не видит: коннектор подставляет токен в исходящий запрос сам.
Может ли интеграция ходить куда-то, кроме нашей Jira?
Нет. Наружу интеграция ходит только через коннектор и только по адресам, выведенным из полей настройки, — в данном случае из адреса вашей Jira. Всё остальное коннектор отклоняет.
Может ли бот начать работу сам, без обращения?
Нет. Работу запускает только прямое обращение — упоминание бота в комментарии. Метки и смена полей не считаются: их ставят правила и массовые правки, и это привело бы к работе, которую никто не заказывал, но за которую выставлен счёт. Назначение тикета боту — это обращение, но оно тоже бывает автоматическим, поэтому по умолчанию выключено и включается отдельной настройкой подключения.
Может ли модель случайно написать в тикет на этапе анализа?
Нет. Инструменты доступны только на читающих стадиях, и только те, что помечены как читающие. add_comment туда не попадает, и проверяет это коннектор у себя, а не мы у себя.
Нужно ли открывать порт для вебхуков?
Не обязательно. Опрос Jira работает всегда и не требует открытых портов; приём событий — ускорение для тех, кому есть куда его направить. Порт открывает коннектор, один на все подключения; сами интеграции портов не открывают вовсе.
Как обновляется интеграция?
Подключение закреплено за конкретной версией — обновление не происходит само по себе. Новая версия появляется в каталоге, и вы решаете, когда на неё перейти. Перед переходом коннектор проверяет, что ваши настройки подходят новой версии, и отказывается, называя недостающее поле.
А если наша система умеет только присылать вебхук и опрашивать её нечем?
Это рабочий случай. Интеграция может разбирать пришедший вызов и делать из него событие, не обращаясь к API источника вообще — так интегрируются внутренние сервисы, которые умеют только пушить, и изменения, которых в текущем состоянии уже нет. Приёмник, секрет и подпись при этом всё равно на стороне коннектора: сама интеграция порт не открывает.
Как быстро приходит ответ на упоминание в тикете?
Без приёма событий — в пределах интервала опроса, это секунды-десятки секунд до того, как запрос будет принят; сам ответ занимает столько, сколько занимает работа. С включённым приёмом запрос принимается почти сразу, как только трекер прислал вызов.
Может ли бот ответить на один и тот же вопрос дважды?
Нет. У каждого события свой идентификатор, коннектор сдвигает отметку прочитанного только за доставленными событиями, а платформа отклоняет повторы. Перезапуск агента или обрыв связи не превращаются во второй ответ.
А если у машины нет выхода в интернет?
Работает. Каталог и бандлы можно перенести файлами подписанным комплектом или зеркалировать наш реестр в свой Harbor либо Nexus. Подпись проверяется в любом случае — ради такого переноса она и существует.

Дальше

Подключить Jira

Поставьте коннектор в своей сети, откройте его локальную страницу и установите интеграцию из каталога. Пересобирать ничего не нужно.

Юрлицам и ИП — оплата переводом по реквизитам и закрывающие документы