개발 공부 일지/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
이슈 생성 결과

 

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

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