Release PR만들어질때, Jira 이슈에 배포 버전 자동으로 추가하기(feat. GitHub Action)
- 회사에서 JIra를 사용하면서 앱 배포버전을 명시하기 위해 fix versions를 활용하고 계신가요?
- Release PR이 만들어지면 알아서 해당 작업에 포함된 Jira 이슈들에 fix versions를 추가해줍니다
- 더이상 수동으로 jira이슈에 fix versions 추가하지 마세요
안녕하세요.
헤이딜러 안드로이드팀 박상권입니다.
기존 jira 이슈에 Release 버전을 추가하는 업무방식
Jira를 사용하고 있는 개발자라면
[Releases]라는 배포버전 개념을 사용하고 계실겁니다.
보통 크게 아래 2가지중 1가지 방식으로 Jira 이슈의 버전관리(fix versions)를 하고 있습니다.
[업무방식 1] 이슈 만들때 fix versions 추가
Jira 이슈마다 이 작업이 어느 버전에 반영될지 fix versions에 해당 배포 버전을 명시하도록 합니다.
- 만약 이슈를 만들때 누락해서 fix versions를 추가 하지 않으면 놓치는 경우가 발생
[업무방식 2] Release PR에 작업된 이슈들을 fix versions 추가
실제 Release PR을 만드는 시점에 해당 PR에 포함된 이슈들에 배포될 버전을 fix versions로 추가
- 매번 수동으로 PR의 모든 이슈를 찾아서 추가하는 것이 번거로움
어떤 업무방식으로 Release의 버전을 관리하고 있었든 문제는 있었습니다.😨
GitHub Action
이러한 문제를 해결하기 위해
Release PR이 만들어질때,
해당 작업에 포함된 Jira이슈들에 배포되는 해당 Release버전을 자동 기재
하는 Github Actions Workflow를 만들었습니다.🎉🎉
또한 이 기능을 다른 분들도 편하게 사용할 수 있도록
오픈소스로 만들고 Marketplace에 배포해두었습니다.
(밥상 다 차려놨으니 숟가락🥄만 드세요)
[구현 로직]
- release PR로부터 버전 정보 extract
- repository정보로부터 commits를 가져와 그 안에서 Jira이슈 key extract
- Jira API를 통해 해당 이슈들 정보 가져오기
- Jira API로 해당 Jira이슈의 Fix version에 버전 추가
(추가 옵션)
- Subtask 이슈 무시 기능
: Jira이슈에서 하위로 만든 Subtask는 보통 fix versions를 넣지않는 경우가 많습니다.
: 상위의 task만 fix versions가 추가되고 하위에 만들어진 이슈까지는 넣을필요가 없기 때문입니다. - Child 이슈 무시 기능
: Epic 이슈로 만들고 하위에 이슈를 만들면 Subtask가 아닌 Task로 이슈가 만들어집니다.
: 이러한 경우도 Subtask와 마찬가지로 이 하위 child 이슈에는 fix versions를 넣지 않는 경우가 많습니다.
사용방법
이 GitHub Action이 각자 회사의 Jira의 프로젝트에 접근하기 위해서는
Auth Token이 필요합니다.
- Atlassian Account 를 통해 API token발급
- Jira계정 이메일주소와 API token을 조합해서 텍스트 생성
useremail:api_token
예시)ted@prnd.co.kr:xxxxxxx
- BASE64 인코딩
- Linux/Unix/MacOS:
echo -n user@example.com:api_token_string | base64
- Windows 7 and later, using Microsoft Powershell:
$Text = ‘user@example.com:api_token_string’
$Bytes = [System.Text.Encoding]::UTF8.GetBytes($Text)
$EncodedText = [Convert]::ToBase64String($Bytes)
$EncodedText
Auth Token이 준비되셨다면,
GitHub Repository의 .github/workflows
폴더아래에 아래 예제와 같은 방식으로 만드셔서 파일을 넣으시면 됩니다.
name: Jira issue version by release PR
on:
pull_request:
types: [ opened, synchronize, ready_for_review ]
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Jira issue version by release PR
id: add_jira_issue_version
uses: PRNDcompany/jira-issue-version-by-release-pr@0.6
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
jira-token: ${{ secrets.JIRA_TOKEN }}
jira-domain: 'your-domain'
jira-version-prefix: 'Customer'
- name: Print jira issue keys
run: |
echo ${{ steps.add_jira_issue_version.outputs.jira_issue_keys }}
github-token
: GitHub에서 사용하는 PATjira-token
: 위에서 만든 token(Jira API token)jira-domain
: Jira의 도메인 이름 ex)https://your-domain.atlassian.net
jira-version-prefix
: 버전 이름 (고객 1.1.0 이라면 ‘고객' 입력)
결과확인
- Release PR branch에서부터 버전 이름 10.1.0을 받아서 fix versions 이름을
‘딜러콜 10.1.0’
으로 결정했습니다. - PR에 있는 commit목록들로부터 Jira 이슈 key를 모두 추출합니다.
- 각 jira 이슈의 정보를 가져와서
‘딜러콜 10.1.0’
이 fixVerions에 들어있는지 확인합니다. - fixVersions에 없는 jira 이슈들에 모두
‘딜러콜 10.1.0’
을 넣어주는 작업을 합니다.
작업 결과물
jira_issue_keys
: 위의 작업을 통해서 추가된 Jira 이슈들의 key목록을 알 수 있습니다.fail_jira_issue_keys
: 작업중 실패한 jira 이슈들의 key 목록을 알 수 있습니다.
: commit에 존재하지 않는 jira이슈 key를 잘못 적은 경우를 발견 가능
아래와 같은 step을 추가해서 문제가 발생할 경우, 댓글을 남기도록 처리할 수도 있습니다.
// ...
- name: Create comment
if: ${{ steps.add_jira_issue_version.outputs.fail_jira_issue_keys != '[]' }}
uses: peter-evans/create-or-update-comment@v3
with:
issue-number: ${{ github.event.pull_request.number }}
body: |
@${{ github.event.pull_request.assignee.login }} Jira issue version 추가 문제이슈 발견 😱
${{ steps.add_jira_issue_version.outputs.fail_jira_issue_keys }}
token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
여러분들도 저희가 만든 GitHub Actions 파일 추가하셔서
수동으로 작업하시던 Jira버전 관리를 자동화 해보세요.
추가 기능 제안이나 버그가 있다면 issue에 남겨주시거나 댓글로도 남겨주세요!