프로젝트 회의 중, 발생하는 이슈를 어디에 등록해야 할지 논의가 생겼다.
프로젝트에서 협업 툴로 Jira를 사용하기로 했는데, Github에 있는 Issue를 사용해야 할 지 얘기가 나온 것이었다.
분명 Jira를 사용하면 Jira가 제공하는 여러 기능들을 사용할 수 있다.
하지만 Github Issue를 사용하면 PR을 보낼 때 Github가 제공하는 여러 기능을 제공 받을 수 있다.
또한, 포트폴리오를 제출할 때 보통 Github 링크를 제출하므로 보다 취업에 유리한 점도 제공될 수 있다고 판단하여 Issue 관리를 Github를 통해 진행하기로 했다.
하지만 그렇다고 해서 Jira의 사용을 포기하기엔 난감한 부분이 있었다.
사용성이나 비주얼 측면에선 Jira의 기능들이 너무 매력적이었다.
따라서 Github Issue와 Jira Issue를 같이 사용하는 방법을 선택하였다.
이때, 문제점이 하나 발생했는데 바로 Github에서 Issue를 만들면, 수동으로 직접 Jira에도 Issue를 등록해야 했다.
이렇게 진행할 거면 차라리 하나만 관리하는 것이 나으므로 방법을 찾아야 했다.
여러 자료를 조사한 결과 Github Actions을 사용하면 해당 문제점을 해결할 수 있었다.
Github Actions를 사용하면 여러 가지 빌드와 배포 등 깃허브와 관련된 많은 작업을 자동화할 수 있다.
이번에 사용한 기능은 빌드와 배포에 관련된 내용은 아니다.
Github Actions에 사용한 workflow 코드는 다음과 같다.
name: Create Jira issue # 1
on: # 2
issues:
types: [opened]
jobs: # 3
create-issue: # 4
name: Create Jira issue # 5
runs-on: ubuntu-latest # 6
steps: # 7
- name: Login
uses: atlassian/gajira-login@v3 # 8
env: # 9
JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}
JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }}
- name: Create Issue
uses: atlassian/gajira-create@v3
with:
project: FESTA
issuetype: Task
summary: '${{ github.event.issue.title }}'
description: '${{ github.event.issue.html_url }}'
코드를 설명하면 다음과 같다.
#1workflow의 이름을 지정한다.
이때 지정한 이름은 깃허브 리포지터리의 Actions 탭의 이름이 된다.
#2workflow가 실행될 트리거를 설정한다.
해당 workflow의 목적은 issue가 새로 생성될 때 실행되어야 하므로, types 속성에 opend 값을 설정했다.
Issue의 types 속성들은 다음 링크에서 확인할 수 있다.
#3workflow에서 수행될 작업을 정의한다.
#4jobs의 job을 정의한다.
자세한 설명은 다음 링크를 참조하자.
#5해당 job의 Github UI에 표시되는 작업의 이름을 설정한다.
#6job이 실행될 환경을 정의한다.
자세한 설명은 링크를 참조하자.
#7steps를 사용하여 job이 실행될 작업을 지정할 수 있다.
- name: ${name} 을 사용하여 각 step을 정의한다.
자세한 설명은 링크를 참조하자.
#8uses를 사용하면 다른 리포지터리에 정의된 작업을 사용할 수 있다.
자세한 설명은 링크를 참조하자.
사용된 uses는 마켓플레이스에도 등록 되어있다.
자세한 사용법은 위의 링크를 참조하자.
#9jira-login에서 사용할 민감한 개인 정보는 Github의 secrets을 사용하여 유출되지 않게 했다.
최종적으로 workflow의 흐름은 다음과 같다.
이렇게 하여 Github Issue를 생성할 때, Jira에도 Issue가 같이 등록되도록 하여, 실수로 인해 누락되는 일이 없이 프로젝트를 관리할 수 있게 되었다.
추가로, Github Issue가 Closed 상태로 변한다면, Jira Issue도 완료된 상태로 바뀌도록 할 수 있는 스크립트를 작성해 봐도 좋을 것 같다.