
2.검색창에 github for jira 검색 후 클릭




https://roll-over-program.tistory.com/78
위 블로그 참고하여 branch연동
이슈키를 포함하여 branch를 생성하고 git commit message에 이슈키를 포함하여 commit을 해야 jira에서
이슈 추적이 자동으로 된다
그러므로 git commit message template을 수정해야할듯

Name에는 변수명을, Secret에는 값을 입력하고 "add secret"을 누른다.

GitHub에 저장된 Secrets 값은 워크플로우 파일 안에서 ${{ secrets.VARIABLE_NAME }} 형태로 불러올 수 있다.
예를 들어, Jira 로그인을 위해 아래와 같이 환경 변수를 설정하면 된다:
env:
JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}
JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }}
name: '이슈 생성'
description: 'Repo에 이슈를 생성하며, 생성된 이슈는 Jira와 연동됩니다.'
labels: [feat]
title: '이슈 이름을 작성해주세요'
body:
- type: input
id: parentKey
attributes:
label: '🎟️ 상위 작업 (Ticket Number)'
description: '상위 작업의 Ticket Number를 기입해주세요'
placeholder: 'INOUT-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
name: Create Jira issue
on:
issues:
types:
- opened
jobs:
create-issue:
name: Create Jira issue
runs-on: ubuntu-latest
steps:
- 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 }}
- name: Checkout main code
uses: actions/checkout@v4
with:
ref: main
- name: Issue Parser
uses: stefanbuck/github-issue-praser@v3
id: issue-parser
with:
template-path: .github/ISSUE_TEMPLATE/issue-form.yml
- name: Log Issue Parser
run: |
echo '${{ steps.issue-parser.outputs.issueparser_parentKey }}'
echo '${{ steps.issue-parser.outputs.__ticket_number }}'
echo '${{ steps.issue-parser.outputs.jsonString }}'
- 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
- name: Create Issue
id: create
uses: atlassian/gajira-create@v3
with:
project: SKP
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"
- 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}"
- 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 }})'
issue가 close될떄도 처리하기 위한 close-jira-issue.yml도 추가했다.
name: Close Jira issue
on:
issues:
types:
- closed
jobs:
close-issue:
name: Close Jira issue
runs-on: ubuntu-latest
steps:
- name: Login to Jira
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 }}
- name: Extract Jira issue key from GitHub issue title
id: extract-key
run: |
ISSUE_TITLE="${{ github.event.issue.title }}"
JIRA_KEY=$(echo "$ISSUE_TITLE" | grep -oE '[A-Z]+-[0-9]+')
echo "JIRA_KEY=$JIRA_KEY" >> $GITHUB_ENV
- name: Close Jira issue
if: env.JIRA_KEY != ''
uses: atlassian/gajira-transition@v3
with:
issue: ${{ env.JIRA_KEY }}
transition: Done
settings - Actions -General탭에 접근하여
Read and Write Permission 체크하기

먼저 GitHub의 Issues 탭에 들어가서 새로운 이슈를 작성해준다.

이슈를 생성하면, 자동으로 실행되는 GitHub Actions를 Actions 탭에서 확인할 수 있다.

정상적으로 작동했다면, 아래와 같이 Jira에 자동으로 이슈가 생성된 것도 확인할 수 있다.

원래는 생성된 Jira 이슈 상태에 따라 작업 브랜치를 자동으로 상위 브랜치에 병합되도록 GitHub Actions로 자동화를 시도했었다.
예를 들어, Sub-task는 Task 브랜치로, Task는 Epic 브랜치로, 그리고 최종적으로 Epic은 master 브랜치로 병합되도록 하는 구조였는데,
아직 Git 사용에 익숙하지 않다 보니 현재는 브랜치 병합은 수동으로 진행하고 있다.
추후 Git 사용에 익숙해지면 이 부분도 다시 자동화할 예정!
위 글의 .github/workflows/create-jira-issye.yml를 보면 완성된 코드가 이미 들어가 있지만
task(모든 기타 표준 이슈 유형) 유형 이슈에서 Sub-task(모든 하위 작업 이슈 유형) 유형 이슈를 연동해주는 과정에서 발생한 에러에 대한 내용이다.
우선 jira의 이슈 계층 구조는 다음과 같다.
Epic
가장 상위 계층 (hierarchyLevel: -1)
하위로는 표준 이슈 유형들만 가능 (예: Task, Story, Bug 등)
❌ Sub-task는 직접적으로 Epic 밑에 둘 수 없음
Standard Issue Types (모든 기타 표준 이슈 유형)(hierarchyLevel: 0)
예: Task, Story, Bug 등
상위: Epic 가능 ✅
하위: Sub-task 가능 ✅
Sub-task(모든 하위 작업 이슈 유형) (hierarchyLevel: -1)
반드시 표준 이슈 유형(Task, Story 등)의 하위로만 생성 가능
❌ Epic의 직접 하위가 될 수 없음
위 구조는 기본적으로 jira free tier에서 고정된 계층 구조이다. 그러므로 당연히 Sub-task가 Task와 연동 될 줄 알았다. issue를 만들어보면 다음과 같은 에러가 생긴다.

관리자 설정과 프로젝트 설정 모두 'Sub-task'를 설정해주어도 오류가 해결되지 않았지만 프로젝트 설정> 하위작업을 'Sub-task'로 통일하니깐 해결되었다(모든 name을 통일해 줘야 하는듯 왠래 '하위 작업'으로 표시되어 있었는데 같은 의미인줄 알고 내버려 둿었다.)

변경 후 실행 결과:


- name: Checkout jiratest code
uses: actions/checkout@v4
with:
ref: 존재하지 않는 branch

- name: Checkout jiratest code
uses: actions/checkout@v4
with:
ref: main
존재하는 branch로 수정하면 해결된다.