Как мы кастомизируем Yandex Tracker под собственные проекты
Yandex Tracker — аналог Jira, который так же предназначен для совместной работы над проектами и управления процессами внутри компании. Когда мы стали использовать его для внутренних проектов, нам захотелось его немного кастомизировать. Например, сервис не может автоматически перемещать задачи по виртуальной доске, а перемещать их самостоятельно не всегда удобно. Разработчик может запушить коммит и открыть pull request (PR), но затем ему придется зайти в Yandex Tracker и вручную изменить статус задачи.
Одна из команд Evrone, работающая над внутренним ERP-проектом, решила автоматизировать этот процесс. Сразу же появилась идея создать экшен для GitHub Actions, поскольку на данный момент ничего подобного в Github нет. У Yandex Tracker есть API, которому можно отправлять запросы, например, «Перевести задачу в другой статус».
Это и делает Yandex-tracker-action: взаимодействует с Yandex API «за кадром» и перемещает задачу. Теперь при открытии pull request выполняется действие по перемещению задачи. Когда мы принимаем pull request, задача также переходит в статус «Merged».
GitHub — evrone-erp/yandex-tracker-action
github.comКак работает 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 " -H "X-Org-ID: " -H "Content-Type: application/json" https://api.tracker.yandex.net/v2/issues//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 в проектах клиентов.
В процессе работы над Yandex-tracker-action мы приобрели ценный опыт и лучше разобрались с тем, как работает Yandex Tracker. Мы поняли, что таким образом можно создавать любые фичи, и теперь надеемся использовать полученные знания для разработки ещё более полезных функций.
Валерий Сиволапенко, DevOps-инженер Evrone.
В каждой компании свои собственные бизнес-процессы, и экшены должны быть адаптированы к тем статусам, которые требуются каждой конкретной команде. Например, когда мы открываем pull request, мы переводим задачу в состояние «На ревью», но в другой компании этот процесс может быть построен иначе, и задачу нужно перевести в другое поле.
В новом релизе мы собираемся предусмотреть подобные случаи и сделать так, чтобы пользователь мог указать несколько переходов между статусами. В этом случае экшен рассмотрит, можно ли перевести задачу в первый статус или во второй и так далее. Если нельзя перевести задачу ни в один из перечисленных статусов, то просто отобразится список доступных переходов.