Git

[Git] Github Action을 활용한 Issue 및 feature branch 생성 자동화

dev-hpk 2025. 1. 15. 15:23

프로젝트를 진행하면서 Git Flow 전략을 토대로 개발을 하기 위해 각 Issue 별로 develop 브랜치에서 feature 브랜치를 따서 사용했습니다.

 

매번 Issue 생성 → 브랜치 생성의 과정을 반복하다 보니 번거롭다는 생각이 들어 자동화해 보자는 생각에 구글링 하던 중 Jira와 Github Action을 찾게 되었습니다.

 

Jira와 Github을 연동하면 Jira Issue에서 바로 Github branch를 생성하고 Issue와 관련된 코드 변경 사항을 추적할 수 있다고 합니다.

출처 - https://lesstif.atlassian.net/wiki/spaces/JIRA/pages/1019052090/Jira+Issue+Code

 

그런데 최대 10명의 사용자와  2GB 저장소 제공이라는 제한 사항이 있네요🤔

저의 경우 주로 소규모 프로젝트를 진행해하기 때문에, 복잡한 프로젝트 관리보다는 간단한 이슈 관리 목적으로 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 - GitHub Marketplace

GitHub action that creates a new branch after assigning an issue

github.com

설치 방법은 아래 두 가지 있다고 하네요

1️⃣ repository에 Create Issue Branch app 설치하기

2️⃣ Github Action을 통해 사용하기 (YAML config에 워크플로우를 제어할 코드를 작성)

 

저는 2번을 적용해 보겠습니다.

issue-branch.yml 파일 추가 및 적용

name: Create Feature Branch on Issue Creation

on:
  issues:
    types: [opened]

jobs:
  create-branch:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2
        with:
          token: ${{ secrets.TOKEN }}
          ref: feature

      - name: Create feature branch
        env:
          ISSUE_NUMBER: ${{ github.event.issue.number }}
          ISSUE_TITLE: ${{ github.event.issue.title }}
        run: |
          # 브랜치 이름 생성 (특수문자 및 공백 처리)
          ISSUE_TITLE_CLEAN="${ISSUE_TITLE// /-}"  # 공백을 '-'로 대체
          ISSUE_TITLE_CLEAN="${ISSUE_TITLE_CLEAN//[^a-zA-Z0-9가-힣_-]/}" # 영문, 한글, 숫자, '_'만 남김

          BRANCH_NAME="#${ISSUE_NUMBER}_${ISSUE_TITLE_CLEAN}"

          # 'feature' 브랜치를 기준으로 새 브랜치 생성 및 푸시
          git checkout feature
          git pull origin feature  # 최신 상태로 업데이트
          git checkout -b "$BRANCH_NAME"
          git push origin "$BRANCH_NAME"
  • name : Create Feature Branch on Issue Creation을 워크플로우 이름으로 설정
  • on.issues.types : 새로운 이슈(opened)가 생성될 때 워크플로우를 실행하도록 트리거 설정
  • ISSUE_NUMBER : 생성된 이슈 번호를 저장
  • ISSUE_TITLE : 생성된 이슈 제목을 저장
  • BRANCH_NAME : [이슈 번호]_[필터링 된 이슈 제목] 형태로 브랜치 이름을 생성
    (ex. 이슈 테스트 → #1_이슈-테스트)
  • git checkout feature & git pull origin featrue : feature 브랜치로 이동 후 최신 상태로 업데이트
  • git checkout -b "$BRANCH_NAME" : 생성한 브랜치 이름으로 브랜치 생성
  • git push origin "$BRANCH_NAME" : 원격 저장소에 생성한 브랜치를 푸시(push)

 

이제 적용도 끝났으니 직접 이슈를 생성해 보면서 테스트해 보겠습니다!

테스트 이슈 생성
이슈 생성 결과

 

이슈를 생성했지만, 브랜치는 생성되지 않았습니다..🤔

 

수 차례 시도에도 이슈만 생성되고 브랜치는 생성되지 않는데 뭐가 문제일까요😭😭😭😭

 

포기하는 마음으로 Actions 탭을 확인해 보니, 이슈 생성에 대한 에러를 확인할 수 있었습니다.

Create Issue Branch 에러

with:
  token: ${{ secrets.TOKEN }}

 

token으로 secrets.TOKEN을 사용했는데, 정작 TOKEN을 설정해주지 않았네요.

Token은 GitHub Personal Access Token 설정 페이지에서 생성할 수 있습니다.

TOKEN이라는 이름으로 토큰을 생성하고 repository에 추가해 보겠습니다.

github personal access token 생성
토큰 생성 결과

TOKEN 적용도 끝났으니 다시 이슈 생성 테스트를 해보겠습니다👍

Create Issue Branch Retry
이슈 생성 결과

 

이슈를 생성하니 [이슈 번호]_[이슈 타이틀] 형태로 브랜치가 잘 생성되었습니다.

앞으로 진행할 팀 프로젝트에 적용하면 매번 이슈에 해당하는 브랜치를 직접 생성하는 번거로움이 사라지겠네요✨