지난 포스트에서 Jira를 도입하면서 아래와 같은 Issue 관리의 불편함🔥을 느꼈다.
(기존에 Github에서 관리하던 Issue를 Jira에서만 관리하기에... )
1. 이슈 생성 & 완료는 Jira에서 진행
2. 작업한 이슈들은 Jira에만 기록됨 (Github에서 확인 X)
그래서 Github Actions를 이용해 이슈 생성 & 완료를 자동화하는 방법에 대해 찾아보았고,
이번 포스트에서는 [1. 이슈 등록]에 대해 작성하려고 한다.
전반적인 Flow는 아래와 같다.
[1. 이슈 등록] | [2. 이슈 닫기] |
1. Github Issue 등록 2. Github Actions - Issue open 트리거 3. Jira Issue 자동 생성 4. Jira 생성된 Issue의 Ticket Number로 브랜치 자동 생성 |
1. Github Issue 닫기 2. Github Actions - Issue close 트리거 3. Jira Issue 상태 변경 |
[1. 이슈 등록]
1-(1). 이슈 템플릿 만들기
Github에서 사용하는 마크다운과 Jira의 마크다운은 형식이 다르다고 한다. (Jira만의 마크다운을 쓴다나 뭐라나... ex. ### -> h3.)
그래서 파싱을 위해 이슈 템플릿을 만들어 진행하는 게 편리하다.
github-issue-parser 라이브러리를 이용하기 위해, 해당 형태로 yml 파일을 생성하면 된다.
(yml 형태의 이슈 템플릿은 처음 만들어 보았는데, 입력 폼 형태로 받을 수 있어서 기존 방식보다 편리한 느낌이었다! 😎)
(.github/ISSUE_TEMPLATE/issue-form.yml)
name: '이슈 생성'
description: 'Repo에 이슈를 생성하며, 생성된 이슈는 Jira와 연동됩니다.'
labels: [feat]
title: '이슈 이름을 작성해주세요'
body:
- type: input
id: parentKey
attributes:
label: '🎟️ 상위 작업 (Ticket Number)'
description: '상위 작업의 Ticket Number를 기입해주세요'
placeholder: 'PRJ-00'
validations:
required: true
- type: input
id: branch
attributes:
label: '🌳 브랜치명 (Branch)'
description: '영어로 브랜치명을 작성해주세요'
validations:
required: true
- type: input
id: description
attributes:
label: '📝 상세 내용(Description)'
description: '이슈에 대해서 간략히 설명해주세요'
validations:
required: true
- type: textarea
id: tasks
attributes:
label: '✅ 체크리스트(Tasks)'
description: '해당 이슈에 대해 필요한 작업목록을 작성해주세요'
value: |
- [ ] Task1
- [ ] Task2
validations:
required: true
이렇게 템플릿을 만들면 아래와 같이 입력 폼 형태로 이슈를 생성할 수 있다!
1-(2). Repository Secret에 Jira 로그인 정보 등록
Github Actions에서 Jira API들을 사용하기 위해 Jira 로그인을 위한 정보들을 Repository Secrect에 등록해 두어야 한다.
- JIRA_BASE_URL : 지라 base url (ex. https://test.atlassian.net)
- JIRA_API_TOKEN : 해당 링크에서 토큰 생성
- JIRA_USER_EMAIL : 토큰 생성한 계정의 이메일 (이 계정이 이슈 Reporter로 들어감, 이슈 생성 후 변경 가능하니 상관 X)
1-(3). 이슈 생성 workflows 파일 만들기
전문은 링크에서 확인하고, 여기서는 각 단계별로 설명하겠다.
Step1. Jira 로그인
- name: Login
uses: atlassian/gajira-login@v3
env:
JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}
JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }}
Step 2. 이슈 파싱 & Jira 문법으로 Convert
- name: Issue Parser
uses: stefanbuck/github-issue-praser@v3
id: issue-parser
with:
template-path: .github/ISSUE_TEMPLATE/issue-form.yml
- name: Convert markdown to Jira Syntax
uses: peter-evans/jira2md@v1
id: md2jira
with:
input-text: |
### Github Issue Link
- ${{ github.event.issue.html_url }}
${{ github.event.issue.body }}
mode: md2jira
Step 3. Jira에 이슈 생성
- project: 해당 프로젝트의 키 (ex. PRJ)
- issuetype: 이슈 타입 (ex. Task, Bug, Subtask)
- name: Create Issue
id: create
uses: atlassian/gajira-create@v3
with:
project: PRJ
issuetype: Task
summary: '${{ github.event.issue.title }}'
description: '${{ steps.md2jira.outputs.output-text }}'
fields: |
{
"parent": {
"key": "${{ steps.issue-parser.outputs.issueparser_parentKey }}"
}
}
- name: Log created issue
run: echo "Jira Issue ${{ steps.issue-parser.outputs.parentKey }}/${{ steps.create.outputs.issue }} was created"
Step 4. 브랜치 생성
Jira 컨벤션에 맞추어 브랜치명을 '[TICKET_NUMBER]BRANCH_NAME'로 생성
- name: Checkout develop code
uses: actions/checkout@v4
with:
ref: develop
- name: Create branch with Ticket number
run: |
ISSUE_NUMBER="${{ steps.create.outputs.issue }}"
ISSUE_TITLE="${{ steps.issue-parser.outputs.issueparser_branch}}"
BRANCH_NAME="${ISSUE_NUMBER}-$(echo ${ISSUE_TITLE} | sed 's/ /-/g')"
git checkout -b "${BRANCH_NAME}"
git push origin "${BRANCH_NAME}"
Step 5. 생성된 Jira 내용으로 Github 이슈 업데이트
- name: Update issue title
uses: actions-cool/issues-helper@v3
with:
actions: 'update-issue'
token: ${{ secrets.GITHUB_TOKEN }}
title: '[${{ steps.create.outputs.issue }}] ${{ github.event.issue.title }}'
- name: Add comment with Jira issue link
uses: actions-cool/issues-helper@v3
with:
actions: 'create-comment'
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: ${{ github.event.issue.number }}
body: 'Jira Issue Created: [${{ steps.create.outputs.issue }}](${{ secrets.JIRA_BASE_URL }}/browse/${{ steps.create.outputs.issue }})'
이렇게 하면 Github Issue 생성 시,
Jira Issue 생성 -> 해당 Branch 생성 -> Jira Ticket Number로 Github Issue 업데이트
작업이 수행된다.
사용 예시
이렇게 세팅하면 지금까지 했던 것과 동일하게 Github에서 Issue를 생성해 작업을 시작하면 된다.
1️⃣ Github에서 Issue 등록
2️⃣ Github Actions - Issue open 트리거되어 Create Jira Issue 동작
3️⃣ Jira에 이슈가 자동 생성됨
4️⃣ Jira의 Ticket Number로 브랜치 자동 생성
이렇게 Github Issue > Jira Issue 생성 자동화 설정 끝!
다음 포스트에서는 Issue 완료 자동화에 대해 다뤄볼 예정이다 😌 너무 재미있다
[참고]
'⚒️ 기타' 카테고리의 다른 글
프로젝트에서 Github와 Jira 함께 사용하기 (5) - Husky로 Jira 커밋 메시지 작성하기 (0) | 2024.07.09 |
---|---|
프로젝트에서 Github와 Jira 함께 사용하기 (4) - Github Actions로 Github 이슈 닫기 자동화 (0) | 2024.07.09 |
프로젝트에서 Github와 Jira 함께 사용하기 (2) - Github와 Jira 연동하기 (0) | 2024.07.08 |
프로젝트에서 Github와 Jira 함께 사용하기 (1) - Jira란? (0) | 2024.07.08 |