Release PR만들어질때, Jira 이슈에 배포 버전 자동으로 추가하기(feat. GitHub Action)

Ted Park
PRND
Published in
8 min readDec 6, 2023

- 회사에서 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에 배포해두었습니다.
(밥상 다 차려놨으니 숟가락🥄만 드세요)

[구현 로직]

  1. release PR로부터 버전 정보 extract
  2. repository정보로부터 commits를 가져와 그 안에서 Jira이슈 key extract
  3. Jira API를 통해 해당 이슈들 정보 가져오기
  4. 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이 필요합니다.

  1. Atlassian Account 를 통해 API token발급
  2. Jira계정 이메일주소와 API token을 조합해서 텍스트 생성
    useremail:api_token
    예시) ted@prnd.co.kr:xxxxxxx
  3. 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에서 사용하는 PAT
  • jira-token: 위에서 만든 token(Jira API token)
  • jira-domain: Jira의 도메인 이름 ex) https://your-domain.atlassian.net
  • jira-version-prefix: 버전 이름 (고객 1.1.0 이라면 ‘고객' 입력)

결과확인

  1. Release PR branch에서부터 버전 이름 10.1.0을 받아서 fix versions 이름을 ‘딜러콜 10.1.0’ 으로 결정했습니다.
  2. PR에 있는 commit목록들로부터 Jira 이슈 key를 모두 추출합니다.
  3. 각 jira 이슈의 정보를 가져와서‘딜러콜 10.1.0’ 이 fixVerions에 들어있는지 확인합니다.
  4. 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에 남겨주시거나 댓글로도 남겨주세요!

저희와 함께 헤이딜러 서비스를 발전 시켜나가실 분들을 기다리고 있습니다.

헤이딜러 더 알아보기

많은 관심과 지원 부탁드립니다.
감사합니다.

--

--