Jira
Трекеры задач · издатель buff · версия 1.4.4
Задачи, вопросы и ответы прямо в тикетах Jira Data Center и self-hosted Server — не выходя из трекера, в котором уже работает команда.
Ответ приходит комментарием в тот же тикет — со ссылкой на документ и на задачу. Что интеграция получит, видно в каталоге коннектора до установки. Форма настройки строится по схеме, которую интеграция объявляет о себе. Подключение работает: свой процесс, свой набор инструментов, свой разрешённый адрес. Проверка связи говорит не «ок», а версию Jira и под каким аккаунтом вошли. Приёмник событий — у коннектора: один адрес на все подключения. У подключения только выключатель; ссылку для трекера выдаёт коннектор. В приложении видно, что коннектор запустил и какие инструменты отдал модели.
Нажмите на снимок, чтобы открыть его целиком. Все снимки — с работающей установки.
Обзор
Интеграция связывает Buff с вашей Jira изнутри вашей же сети. Команда продолжает ставить задачи и задавать вопросы там, где привыкла: в тикете. Buff читает тикет, заводит по нему задачу разработки, а ответ возвращает комментарием в тот же тикет — со ссылкой на результат.
Сценарии
Ситуации, ради которых его ставят.
Вопрос по коду, не выходя из тикета
Тестировщик завёл тикет «экспорт в CSV ломается на кириллице» и не знает, где копать. Он упоминает бота в комментарии и просит разобраться.
Результат. Через несколько минут в тикете лежит разбор: где формируется выгрузка, почему теряется кодировка и что придётся менять. Никто не заводил задачу и не переключался в другой интерфейс.
Задача разработки прямо из тикета
Продакт описал доработку в тикете — с обсуждением на десять комментариев, где половина требований появилась по ходу. Обычно постановку приходится переписывать заново.
Результат. Buff читает тикет целиком, вместе с комментариями и историей, и заводит по нему задачу разработки. Ссылка на задачу возвращается в тикет, так что трекер остаётся единственным местом, где команда смотрит статус.
Это уже было — найти, где именно
Пришло обращение, подозрительно похожее на прошлогоднее. Искать вручную по JQL долго, а помнит его только тот, кто в отпуске.
Результат. Интеграция ищет по отмеченным проектам и приносит связанные тикеты: дубликаты, прошлые обращения по той же подсистеме и задачи, на которые опирается текущая — с ссылками.
Ответ там, где его ждут
Заказчик задачи не заходит в интерфейс Buff и не собирается. Ему нужен ответ в тикете, который он открыл.
Результат. Готовый разбор или ссылка на pull request приходит комментарием в исходный тикет. Единственный инструмент интеграции, который что-то пишет, — и он недоступен на стадиях, где модель только читает.
Примеры
Что написать и что придёт в ответ. Обращение к боту задаётся в настройках подключения — здесь это «@buff».
@buff, найди в истории тикеты по проблеме кеширования
комментарий в любом тикете отмеченного проекта
инструмент:
search_issuesНашёл 4 тикета по кешированию: • PROJ-218 «Кеш каталога не сбрасывается после смены цены» — закрыт 12.03, исправление в CacheWarmer • PROJ-341 «Пустые ответы /search первые 30 секунд после деплоя» — закрыт 04.06, прогрев кеша • OPS-77 «Redis выедает память на выгрузках» — открыт, обсуждение про TTL • PROJ-402 «Дубли в выдаче после инвалидации» — открыт, похож на текущий
@buff, разберись, почему при экспорте в CSV ломается кириллица
комментарий в самом тикете с проблемой
инструмент:
get_issue + инструменты по кодуПрочитал тикет целиком, вместе с обсуждением, и разобрал по коду. Выгрузка собирается в ExportService.buildCsv, файл отдаётся без BOM и с заголовком text/csv без charset — Excel в Windows читает такой файл в cp1251. Разбор с местами в коде приложил документом и продублировал ссылкой сюда.
@buff, заведи по этому тикету задачу разработки
комментарий в тикете
инструмент:
get_issueЗадача заведена: в неё перенесены описание, требования, всплывшие в комментариях, и ограничения из истории изменений. Ссылка на задачу — в ответном комментарии, так что статус видно, не выходя из трекера.
@buff, research разберись, откуда берётся задержка в отчёте
комментарий в тикете — так запускается глубокое исследование
инструмент:
get_issueСлово после обращения выбирает работу: без него — короткий ответ, «research» — глубокое исследование с документом, «task» — черновик задачи разработки. Работа начинается только по прямому обращению: метка или смена поля бота не запускают — их ставят правила и массовые правки, а не человек, который решил заказать работу.
@buff, что уже обсуждали в этом тикете?
комментарий в тикете с длинной перепиской
инструмент:
get_issueКраткая выжимка обсуждения: что просили изначально, какие требования добавились по ходу (и в каком комментарии), о чём договорились и что осталось нерешённым. Полезно, когда тикету полгода и в нём тридцать комментариев.
Что умеет
Читает тикет целиком, а не заголовок
Инструмент get_issue отдаёт модели описание, комментарии и историю изменений тикета. Это то, из чего складывается настоящая постановка: в заголовке «не работает поиск», а в третьем комментарии — что именно и на каких данных. Инструмент только читает.
Ищет по проекту
search_issues ходит по отмеченным проектам и находит связанные тикеты — дубликаты, прошлые обращения по той же подсистеме, задачи, на которые опирается текущая. Тоже только чтение.
Отвечает в тикете
add_comment пишет ответ в исходный тикет: разбор вопроса, ссылку на задачу разработки или на готовый pull request. Это единственный инструмент интеграции, который что-то меняет, — и он недоступен на стадиях, где модель только читает.
Слышит, когда его зовут
Интеграция сама следит за отмеченными проектами и приносит коннектору всё, что адресовано боту: упоминание в комментарии, снятие метки, назначение задачи. Опрос идёт по расписанию и не требует открытых портов — в закрытом периметре это единственный работающий вариант. Если трекеру есть куда стучаться, вызов доходит сразу: коннектор принимает его, проверяет секрет и подпись и отдаёт ей уже проверенное тело.
Не отвечает дважды на один вопрос
Каждое событие несёт собственный идентификатор и время. Коннектор сдвигает отметку прочитанного только за теми событиями, которые действительно доставил, а платформа отклоняет повторы по идентификатору. Перезапуск агента, потеря связи и повторный опрос не превращаются во второй ответ в тикете.
Берётся за работу только по обращению
Работу запускает прямое обращение — упоминание бота в комментарии («@buff, посмотри») в проектах, которые вы отметили. Метка или смена поля не запускают ничего: их ставят правила маршрутизации, массовые правки и автоматика самого трекера, и работа, которую никто не заказывал, всё равно была бы оплачена. Назначение тикета на учётную запись бота — тоже обращение, но и оно бывает автоматическим, поэтому включается отдельной настройкой. Список отмеченных проектов и есть контроль доступа: внутри них позвать бота может любой участник, за их пределами — никто.
Как пользоваться
Всё происходит на машине, где стоит коннектор. Открывать доступ к вашей сети снаружи не нужно ни на одном шаге.
Шаг 1
Установка занимает одно нажатие
Откройте раздел «Маркетплейс» на локальной странице коннектора. До установки видно, что интеграция получит: адреса, по которым она сможет ходить, какие учётные данные попросит, будет ли принимать вебхуки и сколько инструментов увидит модель. Нажимаете «Установить» — коннектор скачивает подписанный бандл из нашего реестра и проверяет подпись до того, как что-то запишет на диск.
КоннекторМаркетплейс в коннекторе: границы доступа видны до установки. Шаг 2
Настройка — форма из самой интеграции
Дальше добавляется подключение: адрес вашей Jira, ключи проектов, обращение к боту и токен. Форма не написана нами под Jira — она построена по схеме, которую интеграция объявляет о себе, поэтому у любой из них настройка выглядит одинаково понятно. Токен остаётся в коннекторе: интеграция его не видит, коннектор сам подставляет его в исходящие запросы.
КоннекторФорма настройки строится по схеме интеграции, а не пишется под каждую из них. Шаг 3
То же самое из командной строки
Установка без графики равноправна, а не запасной вариант: `connector install jira`, затем `connector instance add jira --config base_url=… --config project_keys=PROJ`. На сервере без иксов вы делаете то же самое и получаете тот же результат.
Шаг 4
Версия подключения не меняется сама
Подключение закреплено за конкретной версией интеграции. Новая версия появляется в каталоге и ждёт: обновление — это ваше действие, а не наше. При обновлении коннектор сначала проверяет, что уже введённые настройки подходят новой версии, и отказывается, называя недостающее поле, — вместо того чтобы сломать работающую интеграцию кнопкой «обновить».
Шаг 5
Машина без интернета
Если у машины нет выхода наружу вообще, каталог и бандлы переносятся файлами: подписанный комплект собирается там, где сеть есть, и кладётся на носитель. Проверка подписи при установке та же самая — именно ради такого переноса она и нужна. Как вариант, весь реестр можно зеркалировать к себе в Harbor или Nexus и указать коннектору на зеркало.
Шаг 6
Несколько Jira — несколько подключений
Одна и та же Jira для разных проектов или две разные Jira — это два подключения одной интеграции. У каждого свои учётные данные, свой список проектов и свой отдельный процесс под собственным пользователем ОС. Переименование ничего не ломает: подключение живёт под идентификатором, а не под названием.
КоннекторКаждое подключение — отдельный процесс со своим набором инструментов. Шаг 7
События приходят сами
После настройки ничего запускать не нужно: интеграция сама следит за отмеченными проектами. Опрос идёт по расписанию и не требует открытых портов — в закрытом периметре это единственный работающий вариант. Хотите быстрее — включите приём событий у коннектора: адрес указывается один раз на всю машину, а у подключения остаётся только выключатель. Ссылку для трекера коннектор выдаёт сам — её не набирают руками, и она привязана к идентификатору подключения, поэтому переименование её не ломает. Секрет внутри ссылки коннектор генерирует и не показывает в настройках.
КоннекторУ подключения — выключатель и выданная ссылка, а не поля адреса.
Границы доступа
То же самое коннектор показывает на вашей машине до установки. Список берётся из подписанного каталога, а не написан здесь руками.
Ходит наружу
только по адресам из полей base_url
Учётные данные
api — значения остаются в коннекторе, интеграция их не видит
Вебхуки
deliver — порт открываете вы, по желанию
| Инструмент | Что делает | Доступ |
|---|---|---|
| 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
Поставьте коннектор в своей сети, откройте его локальную страницу и установите интеграцию из каталога. Пересобирать ничего не нужно.
Юрлицам и ИП — оплата переводом по реквизитам и закрывающие документы