Трекеры

Интеграция с трекерами может быть полезна при внедрении Devprom ALM в организацию, где уже используется какой-то трекер. Например, разработку требований можно вести в Devprom ALM, а разработкой кода управлять в уже используемом трекере.

Разные организации, использующие Devprom ALM, могут организовать обмен данными по общему проекту, сохраняя при этом работу в своих системах.

Devprom предоставляет очень гибкий механизм настройки для обмена данными с внешними трекерами, основанный на мэппинге между Devprom REST API и REST API трекера. Вы можете сопоставить модель данных Devprom модели данных трекера удобным для вас образом, то есть выбрать сущности и атрибуты, которые необходимо синхронизировать. По умолчанию мэппинг позволяет синхронизировать следующие данные (однако, объем функциональности зависит от конкретного трекера):

  • Релизы и версии
  • Пожелания и задачи, включая их состояния
  • Связи между пожеланиями
  • Приложения (атачменты), комментарии
  • Списанные часы

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

Для настройки синхронизации или миграции данных между Devprom ALM и трекерам необходимо перейти к настройкам проекта и добавить нужную интеграцию. На первой вкладке нужно указать параметры подключения:

JIRA

URL, например, https://jira.atlassian.com

Проект - уникальный идентификатор проекта, например, JRASERVER

Имя пользователя и пароль для аутентификации.

В некоторых версия JIRA не поддерживается аутентификация пользователя в REST API по паре имя пользователя/пароль. В этом случае необходимо сгенерировать API Token и в поле "Имя пользователя" указать Email пользователя, а в поле "Пароль" указать API Token

Devprom ALM

URL, например, https://demo.myalm.ru

Проект - кодовое название проекта, которое можно взять из URL ссылок на страницы данных проекта, либо в модуле Настройки - Общие настройки.

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

Redmine

URL, например, https://redmine.openpne.jp

Проект - уникальный идентификатор проекта, например, op3

HTTP-заголовки, необходимо скопировать ключ API в Redmine (свой для каждого пользователя) и указать его после X-Redmine-API-Key:

YouTrack

URL, например, https://youtrack.jetbrains.com

Проект - уникальный идентификатор проекта, например, JT

Имя пользователя и пароль для аутентификации.

Gitlab

URL, например, https://gitlab.com

ИД Проекта - уникальный идентификатор проекта, который указан под названием, на странице проекта:

Токен для аутентификации можно сформировать в разделе Настройки пользователя, в меню Токены доступы (Access Tokens).

Для синхронизации статусов и приоритетов необходимо настроить соответствие:

  • ссылочных имен состояний меткам, ответчающим за состояния в Gitlab;
  • ссылочных имен приоритетов (Администрирование - Настройки - Справочники - Приоритет) меткам, отвечающим за приоритеты в Gitlab.

Поскольку приоритеты и статусы задач в Gitlab определяются при помощи меток, необходимо дополнительно обеспечить хранение перечня меток, путем создания пользовательского атрибута с сылочным именем GitlabLabels

TFS

URL, например https://instancename.visualstudio.com

Проект - название проекта или коллекции TFS

Персональный токен - может быть сгенерирован в настройках профиля пользователя TFS

Выберите направление синхронизации, начните с варианта "Читать из приложения". В этом случае интеграция не будет влиять на данные во внешней системе.

Чтобы данные синхронизировались корректно, необходимо настроить мэппинг. На соответствующей вкладке отображается настройка мэппинга между Devprom ALM REST API и REST API целевой системы. Таким образом, для настройки мэппинга вам необходимо знать возможности этих API.

Настройка мэппинга справочников

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

Начните с настройки мэппинга для приоритетов, типов задач и их статусов.

Настройка мэппинга между справочниками выглядит так:

"mapping": [{"submitted":"Новая"},{"planned":"В работе"},{"State_5bb6079d99e47":"Ожидание клиента"},{"State_5bb6082cb4fd6":"Ответ клиента"},{"State_5bb6079d99e47":"Ожидание оплаты счета"},{"resolved":"Решена"}{"submitted":"*"}]

Здесь приводится мэппинг статусов пожеланий, в каждой паре значений справа - названия статусов в трекере, слева - кодовое имя в Devprom ALM.

Кодовые (или ссылочные) имена доступны в справочниках, например, для статусов нужно включить отображение этого поля в настройках списка статусов:

Далее приводим ссылки для получения названий справочников в различных трекерах:

JIRA Redmine
Приоритет https://jira.atlassian.net/rest/api/latest/priority https://redmine.openpne.jp/enumerations/issue_priority.json
Статус Issue https://jira.atlassian.net/rest/api/latest/status https://redmine.openpne.jp/projects/op3/issue_categories.json
Тип Issue https://jira.atlassian.net/rest/api/latest/issuetype https://redmine.openpne.jp/issue_statuses.json

Мэппинг пользователей осуществляется на основе Email. Перед синхронизацией необходимо создать учетные записи пользователей.

Настройка мэппинга пользовательских полей

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

Redmine

Вам необходимо выяснить идентификатор пользовательского поля в Redmine. Это можно сделать открыв по ссылке карточку задачи и добавив в конце .json, например, https://redmine/issues/1452.json

В разделе "custom_fields" найдите значение поля id. Используйте его в подстановке вида:

"TEST": "issue.custom_fields:(id=42).value"

Использование специальных функций

В REST API интегрируемой системы данные могут быть представлены таким образом, что их невозможно напрямую поставить в соответствие данным REST API Devprom ALM. Например, в интегрируемой системе значение может находиться в списке, а для Devprom ALM требуется скалярное значение. В этом случае можно использовать специальные функции.

Отфильтровать элементы коллекции
"ChangeRequest": {
      "ExternalId": "relations:(rel=System\\.LinkTypes\\.Hierarchy-Reverse).url"
}

В этом примере, в атрибут ExternalId у сущности ChangeRequest будет записано значение из поля url для объекта из коллекции relations, у которого значение атрибута rel равно "System.LinkTypes.Hierarchy-Reverse".

Взять конкретный элемент коллекции
"ChangeRequest": {
      "ExternalId": "relations:first.url"
}

В этом примере, в атрибут ExternalId у сущности ChangeRequest будет записано значение из поля url для первого объекта из коллекции relations. Вместо ключевого слова first можно использовать число, явно указывающее на позицию элемента в коллекции.

Преобразовать коллекцию в строку
"GitlabLabels": "join(labels)"

В этом примере, в атрибут GitlabLabels будет записана строка, в которой через запятую перечислены метрки задачи в Gitlab.