Главная/ Блог/ Yandex-tracker-action

Автоматизируем изменения статуса задач в Yandex Tracker

August 2022

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

В настоящее время Yandex Tracker не может автоматически перемещать задачи по виртуальной доске, а перемещать их самостоятельно не всегда удобно. Например, разработчик может запушить коммит и открыть pull request (PR), но затем ему придется зайти в Yandex Tracker и вручную изменить статус задачи, например, «На ревью».

Одна из команд Evrone, работающая над внутренним ERP-проектом, решила автоматизировать этот процесс. Сразу же появилась идея создать экшен для GitHub Actions, поскольку на данный момент ничего подобного в Github нет. У Yandex Tracker есть API, которому можно отправлять запросы, например, «Перевести задачу в другой статус».

Это и делает Yandex-tracker-action: взаимодействует с Yandex API «за кадром» и перемещает задачу. Теперь при открытии pull request выполняется действие по перемещению задачи. Когда мы принимаем pull request, задача также переходит в статус «Merged».

 

Как работает Yandex-tracker-action

По умолчанию он парсит коммиты вида «[RI-1] implement something» и извлекает номер задачи (в данном случае — RI-1). Вы также можете ставить задачи непосредственно в экшене, например, указывая вывод предыдущего задания. 

Если в pull request есть несколько коммитов с разными номерами задач, все они будут перемещены на доску. Также можно указать несколько задач в экшене. Будут собраны все ключи задач, как указанные пользователем, так и найденные в коммитах.

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

Базовое использование

По умолчанию будут парситься сообщения коммита типа «[RI-1] awesome-feature», где «RI-1» — идентификатор задачи. Вы можете указать конкретный идентификатор задачи, а также использовать логику предыдущего этапа работы.

name: YC Tracker
on:
  pull_request:
    types:
      - opened
      - reopened
      - synchronize
      - closed

jobs:
 transit-tasks:
    runs-on: ubuntu-latest
    steps:

      - name: Checkout
        uses: actions/checkout@v3
        with:
          ref: ${{ github.event.pull_request.head.sha }}

      - name: Move Task When PR Opened
        if: github.event.action != 'closed'
        uses: evrone-erp/yandex-tracker-action@v1
        with:
          token: ${{secrets.GITHUB_TOKEN}}
          yandex_org_id: ${{ secrets.YANDEX_ORG_ID }}
          yandex_oauth2_token: ${{ secrets.YANDEX_OAUTH2_TOKEN }}
          task_url: true
          ignore: ERP-31,ERP-32

      - name: Move Task When PR Merged
        if: github.event.pull_request.merged == true
        uses: evrone-erp/yandex-tracker-action@v1
        with:
          token: ${{secrets.GITHUB_TOKEN}}
          yandex_org_id: ${{ secrets.YANDEX_ORG_ID }}
          yandex_oauth2_token: ${{ secrets.YANDEX_OAUTH2_TOKEN }}
          task_url: true
          ignore: ERP-31,ERP-32

Добавление конкретного ключа задачи

Можно указать номера задач, разделив их запятыми.

- uses: evrone-erp/yandex-tracker-action@v1
  with:
    token: ${{secrets.GITHUB_TOKEN}}
    yandex_org_id: ${{ secrets.YANDEX_ORG_ID }}
    yandex_oauth2_token: ${{ secrets.YANDEX_OAUTH2_TOKEN }}
    tasks: RI-218 # or RI-218,RI-11

Добавление задач, которые нужно игнорировать

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

- uses: evrone-erp/yandex-tracker-action@v1
  with:
    token: ${{secrets.GITHUB_TOKEN}}
    yandex_org_id: ${{ secrets.YANDEX_ORG_ID }}
    yandex_oauth2_token: ${{ secrets.YANDEX_OAUTH2_TOKEN }}
    ignore: RI-1 # or RI-1,DI-8

Комментирование PR с URL задачи

Если true — к текущему PR будет установлен комментарий с адресом задачи из формы в описании PR.

- uses: evrone-erp/yandex-tracker-action@v1
  with:
    token: ${{secrets.GITHUB_TOKEN}}
    yandex_org_id: ${{ secrets.YANDEX_ORG_ID }}
    yandex_oauth2_token: ${{ secrets.YANDEX_OAUTH2_TOKEN }}
    task_url: true

Получение всех доступных переходов

По умолчанию, если открыт PR, задача перейдёт в статус in_review. Если PR принят, статус — resolved. Вы можете указать имя, которое удобно читать, или имя конечной точки.

Получить все доступные состояния:

curl -H "Authorization: OAuth <oauth2-token>" -H "X-Org-ID: <org-id>" -H "Content-Type: application/json" https://api.tracker.yandex.net/v2/issues/<task-key>/transitions | jq ".[].id"

Посмотреть вывод экшена и найти статусы:

- uses: evrone-erp/yandex-tracker-action@v1
  with:
    token: ${{secrets.GITHUB_TOKEN}}
    yandex_org_id: ${{ secrets.YANDEX_ORG_ID }}
    yandex_oauth2_token: ${{ secrets.YANDEX_OAUTH2_TOKEN }}
    to: 'На ревью' # or 'in_review'

Один ход для открытого PR и один ход для принятого

Вы можете задать разную логику для перемещения задач в момент открытия PR и в момент его принятия. См. выше названия состояний по умолчанию.

- name: Move Task When PR Opened
  if: github.event.action != 'closed'
  uses: evrone-erp/yandex-tracker-action@v1
  with:
    token: ${{secrets.GITHUB_TOKEN}}
    yandex_org_id: ${{ secrets.YANDEX_ORG_ID }}
    yandex_oauth2_token: ${{ secrets.YANDEX_OAUTH2_TOKEN }}
    to: 'in_review'

- name: Move Task When PR Merged
  if: github.event.pull_request.merged == true
  uses: evrone-erp/yandex-tracker-action@v1
  with:
    token: ${{secrets.GITHUB_TOKEN}}
    yandex_org_id: ${{ secrets.YANDEX_ORG_ID }}
    yandex_oauth2_token: ${{ secrets.YANDEX_OAUTH2_TOKEN }}
    to: 'merged'

Планы на будущее

Разработка Yandex-tracker-action началась совсем недавно и всё ещё продолжается. Мы хотим включить в него дополнительные опции, которые могут понадобиться другим компаниям. Поэтому в ближайшем будущем мы собираемся выпустить новый релиз и использовать Yandex-tracker-action в проектах клиентов.

В каждой компании свои собственные бизнес-процессы, и экшены должны быть адаптированы к тем статусам, которые требуются каждой конкретной компании. Например, когда мы открываем pull request, мы переводим задачу в состояние «На ревью», но в другой компании этот процесс может быть построен иначе, и задачу нужно перевести в другое поле. 

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

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

В процессе работы над Yandex-tracker-action мы приобрели ценный опыт и лучше разобрались с тем, как работает Yandex Tracker. Мы поняли, что таким образом можно создавать любые фичи, и теперь надеемся использовать полученные знания для разработки ещё более полезных функций
Валерий Сиволапенко
DevOps-инженер, Evrone
Будем на связи
Прикрепить файл
Максимальный размер файла: 8 МБ.
Допустимые типы файлов: jpg jpeg png txt rtf pdf doc docx ppt pptx.