들어가기 전에
Git branch 전략을 토대로 개발을 하기 위해 각 Issue별로 develop 브랜치 내에 feature 브랜치를 각각 따서 사용하기로 했습니다.
이때, JIRA같은 협업 툴을 이용하면 자동으로 issue에 맞추어 feature 브랜치 생성이 가능하나, github만 사용할 때에는 issue를 생성한 후 직접 develop 브랜치 내에 feature/#issue 브랜치 생성이 필요했습니다.
관련하여 자동화된 스크립트를 작성하면 issue별 브랜치 생성이 가능하다고 들어 구글링을 해보았고, 그 결과 찾아낸 Create Issue Branch(Github Action)을 이용해 자동화하는 과정을 정리해보고자 합니다.
Create Issue Branch
Create Issue Branch는 Issue 생성 시, BranchName으로 정해진 문법에 따라 자동으로 신규 Branch를 생성해주는 Github Action입니다. Create Issue Branch를 이용하면, PR(Pull Request) 후 merge 진행 시 자동 Issue close 역시 가능합니다.
아래 내용을 통해 Create Issue Branch의 기본 설정과 추가 설정(예: branchName 문법 변경 및 PR 후 merge 할 때 자동 Issue close 설정)에 대해 알아보겠습니다.
공식 사이트는 아래 URL을 접근하면 확인하실 수 있으며, 현 포스팅에서 소개하지 않는 내용도 해당 사이트에 있으니 확인하면서 세팅하면 좋습니다.
https://github.com/marketplace/actions/create-issue-branch#license
- Create Issue Branch을 APP으로 사용할 경우, 개인이 사용하거나 public organization repositories에서는 무료이며 private organization repositories에서 사용할 경우 비용을 내야 합니다.
Installation
Create Issue Branch에서 말하는 설치법은 크게 2가지가 있습니다.
- repository 자체에 Create Issue Branch app 설치하기
- Github action을 통해 사용하기(yaml config에 넣기) (✓)
1번 방법의 경우, personal 사용 및 public organization repo에 대해서는 무료이며, private organization repo에 대해서는 유료입니다. Github Action을 사용해보고 싶은 마음도 있었고, 추후 private repo에서 사용하려면 Github Action으로 사용해야 하는 것으로 판단되어 2번 안으로 설치해보았습니다.
Github Action을 통해 사용하기
Github의 workflow YAML configuration에 하기와 같이 작성합니다. 하기 내용은 Create Issue Branch 설치방법에서 가져온 YML으로 실제 사용하실 때에는 변경이 필요한 부분은 수정하여 사용하시면 됩니다.
name: Create Issue Branch
on:
issues:
types: [ assigned ]
issue_comment:
types: [ created ]
pull_request:
types: [ closed ]
jobs:
create_issue_branch_job:
runs-on: ubuntu-latest
steps:
- name: Create Issue Branch
uses: robvanderleek/create-issue-branch@main
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
위 YAML 파일을 간단하게 설명한 내용은 아래와 같습니다.
- name: workflow 이름입니다. Github는 해당 workflow가 진행되는 repo의 action 페이지에 workflow 명을 보여줍니다.
- on.<event_name>.types: workflow를 언제 발생시킬 지에 대한 내용으로, 어떤 타입의 activity가 이루어질 때 workflow를 실행할지 작성합니다.
- 위에서는 issues가 assigned될 때와 pull_request가 closed될 때 발생한다고 보면 됩니다.
- jobs.<job_id>: 각 job은 하나의 id와 연결되어야 합니다.
- job_id는 string이며 해당 job의 config data의 map이라고 볼 수 있습니다.
- 위 코드에서는 create_issue_branch_job이 job_id이며, Action 실행 내역을 클릭했을 때 해당 이름으로 Action이 실행되었음을 확인할 수 있습니다.
- jobs.<job_id>.runs-on: 해당 job을 어떤 machine으로 돌릴지 결정하는 것입니다. 위에서는 ubuntu로 돌림을 확인할 수 있습니다.
- jobs.<job_id>.steps: 하나의 job은 steps라고 불리는 tasks들로 이루어져 있습니다.
- jobs<job_id>.steps[*].uses: job에서 실행할 action을 선택하는 것입니다. action은 재사용이 가능한 unit code이기 때문에, 위에서는 Create-issue-branch가 구현된 repo를 연결하여 구동하는 것이라고 보면 됩니다.
- jobs<job_id>.steps[*].env: 해당 steps를 돌릴 때 사용할 환경변수를 설정하는 것입니다.
Github workflow 문법은 아래 사이트에서 확인 가능하니, 추가적인 syntax 궁금증이 있다면 해당 docs를 읽어보는 것을 추천합니다.
https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions
Create Issue Branch에서 추가설정하기
Create Issue Branch에서 제공하는 추가 기능이 여러가지 있지만, 필자가 사용한 항목에 대해 간단히 작성해보고자 합니다.
하기 항목들은 모두 default 설정에 overwrite하는 부분이므로, repository 내 .github/issue-branch.yml을 생성하여 작성해야 합니다.
[ PR merge 후 자동 issue close 진행하기 ]
default로 설정할 경우, PR merge 후 Issue가 자동으로 close되지 않습니다. 따라서, true로 해당 설정을 변경하면 자동으로 issue를 close해줍니다.
[ Branch name 변경 ]
branchName은 아래와 같이 3가지 방식을 제공해주며, custom으로도 설정이 가능합니다.
- 하지만 branchName에 '/'는 들어가지 않기 때문에 feature/${issue.number}와 같이 하고 싶다면, Source branch를 따로 생성해주어야 합니다.
[ issue label에 따른 branch name prefix 설정하기 ]
branchName은 issue의 label에 따라 prefix를 따로 가져갈 수 있습니다. 이때, label에는 wildcard(*)역시 작동하므로, 모든 label에 대해 하나의 prefix로 가기 위해서는 '*'로 설정해 볼 수 있습니다.
[ Branch 생성 후 Issue에 생성되는 comment message 내용 수정하기 ]
comment message를 수정하고자 할 때에는 하기 내용처럼 원하는 메시지로 변경하면 됩니다.
적용 시 유의할 점
Create Issue Branch의 경우, source branch를 repository의 default branch를 기준으로 진행합니다.
따라서, default branch가 main이라면, main을 source branch로 하여 branch가 신규 생성될 것이기 때문에 자신의 repository의 default branch가 어디인지 확인 후 진행해야 합니다.
실제 적용 예시 확인하기
아래 내용은 public repository를 신규 생성하여 Create Issue Branch를 적용해본 예시입니다.
1. Github Action을 적용하고자 하는 repository에 접근한 뒤, Actions 탭을 클릭하여 set up a workflow yourself를 클릭합니다.
그 후, Create Issue Branch의 Configur Github Action처럼 소스를 작성합니다.
- 필자의 경우, naming을 변경하였으며 issue_comment관련한 속성을 제외하였기 때문에 그 부분을 변경하여 작성했습니다.
2. 필자의 경우, branchName 형식 변경 및 branchName의 prefix 설정 그리고 PR merge 후 자동 Issue close를 위해 하기와 같이 .github/issue-branch.yml을 생성하였습니다.
3. workflow 설정이 완료되었으니, Issue를 하나 생성합니다. Issue 생성 시, Assignees를 등록해야 해당 workflow가 작동하니 반드시 Assignees를 등록합니다.
4. Issue 등록 후 Action 탭에서 확인하면 workflows가 실행된 것을 확인할 수 있고, 해당 action을 클릭하면 신규 생성된 branch명을 확인할 수 있습니다. action 로그에 남은 branchName은 새로 생성된 branchName과 일치하는 것을 아래 사진에서 확인할 수 있습니다.
5. Issue 생성 및 assignees 지정 -> Action 실행이 완료되면 아래와 같이 Issue에 기존에 지정한 comment로 메시지가 남음을 확인할 수 있습니다.
6. 신규 생성된 branch에서 PR을 날린 후 merge를 아래와 같이 진행합니다. 그 후, Action 탭을 확인하면 Create Issue Branch workflows가 다시 한 번 실행됨을 확인할 수 있습니다.
7. workflows가 완료되면, 아래와 같이 Issue close 되는 것까지 확인 가능합니다.
추가 TIP
만약, PR 후 merge된 branch를 삭제하고 싶다면 아래 URL을 보고 따라하면 됩니다.
https://earth-95.tistory.com/101
'DEVELOPMENT TOOLS > Git' 카테고리의 다른 글
[Git] Git 명령어 정리 (0) | 2021.09.26 |
---|---|
[Git] PR 후 merge된 branch 자동 삭제하기 (0) | 2021.09.26 |
[Git] 원격 저장소의 특정 디렉토리만 clone(하위 디렉토리 clone) (0) | 2021.07.27 |
[Git] LeetCode 연동하기(chrome 확장 프로그램 LeetHub 이용) (2) | 2021.05.07 |
[Git] Visual Studio Code에 git 연동하기 (1) | 2021.05.03 |