Release Git Flow_릴리즈 , 태그 생성 자동화 (with. git action)

2023. 9. 24. 17:42Dev_etc/Git

배포를 위한 Git Flow와 

git action을 활용해서, 릴리즈 노트 및 tag 자동 생성 방법에 대해서 다뤄보겠습니다!

 

 

사이드 프로젝트에서는 첫 배포를 진행해봤는데욥

작업하면서, git flow와 자동화 관련해서 이것저것 찾아보다 보니

헷갈리긴 했는데

막상 방법을 정하고 적용하니 쉽더라고요

 

스스로 복기하고 이 편리함을 공유하기 위해 작성해 봅니다.

 

 

Git Flow

우선 저희 프로젝트는 이렇게 4가지의 브랜치로 구분 짓고요.

main 배포 브랜치
dev 개발 통합 브랜치
release dev의 배포될 release 브랜치
feature 기능 별 개발 브랜치

 

 

Flow는 다음과 같습니다

1. feature 브랜치에서 작업

2. feature → dev PR 생성

3. Sqash and Merge로 병합

4.  배포를 위한, dev→ release/v1.0.1 브랜치 생성 (+ release 브랜치로 배포 전 테스트)

5. release/v1.0.1 → main PR 생성

6. Merge pull Request로 병합 & tag 생성

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

여기서 질문,

Q1. 왜 Squash를 사용하나요?

squash의 경우, 병합될 브랜치의 변경사항을 하나의 커밋으로 새로 생성하여 병합시킵니다.

작업 브랜치에 커밋이 많을 경우, git graph가 복잡해지고 작업사항 파악이 어렵기 때문에 feature → dev에서는 Squash and Merge로 처리해 줬습니다!

 

Q2. 그렇다면 release → main에서는 왜 Squash를 사용 안 하나요?

앞서 말한 대로, squash는 변경사항들을 하나의 커밋으로 새로 생성하기 때문에 기존 dev의 변경사항들과 다른 변경사항으로 인지합니다.

그래서 rebase 하게 되면 충..돌 이 일어나기 때문에, release → main에서는 기본 Merge로 진행했습니다.

dev에서 이미 feature 별로 커밋이 정리되었기 때문에 Merge로만 진행되는 것이 작업사항 파악에는 더 좋을 것 같기도 하고요!

 

 

 

릴리즈 노트, 태그 생성 자동화  (with. git action)

 

자 그렇다면,

해당 git flow대로 배포를 진행하려면

1. release/v1.0.1 → main로

2. tag를 생성하고,

3. 릴리즈 노트를 작성해야 하는데요

 

꽤나 번거롭죠

 

그런데 이걸 단번에 도와주는 기특한 git action이 있습니다!

git action은
.github/workflows 위치에 action을 등록하여, 특정 상황에서 trigger 되어 action을 자동수행하는 기능입니다.

 

직접 파일을 생성하거나,

깃헙 페이지에서도 생성할 수 있습니다.

 

 

 

저는 github의 action marketplace에 있는 tag/release 자동화 tool을 사용했습니다.

 

아래 코드를 해당 위치에 생성해 주면 됩니다.

 

.github/workflows/release.yml

name: github action tag release 

on:
  push:
    branches:
      - main

jobs:
  setup-build-deploy:
    name: Setup, Build, and Deploy
    runs-on: ubuntu-latest
    permissions:
      packages: write
      contents: write
      id-token: write 

    steps:
    - name: Bump version and push tag
      id: tag_version
      uses: mathieudutour/github-tag-action@v6.1 
      with:
        github_token: ${{ secrets.GITHUB_TOKEN }} 

    - name: Create a GitHub release
      uses: ncipollo/release-action@v1 
      with:
        tag: ${{ steps.tag_version.outputs.new_tag }}
        name: Release ${{ steps.tag_version.outputs.new_tag }}
        body: ${{ steps.tag_version.outputs.changelog }}

 

 

단, 배포 브랜치가 main이 아니라면 on:push:branches: 부분만 수정하시면 됩니다.

단 2, 처음 git action 활성화시키려면 별도의 설정이 좀 필요합니다.

  1. git 시크릿 토큰을 발급받아 repo에 등록해줘야 합니다.
    1. 개인 계정 Setting-Developer setting-Personal access Token 메뉴에서 토큰을 발급받고
    2. repo의 Setting-Secrets and variables 메뉴에 다음과 같이 해당 토큰을 등록해 줍니다.


   2. repo의 Setting-Actions-General 메뉴 하단에서 다음과 같이 권한을 허용해 주세요.

 

 

 

 

적용 후,

PR을 머지하면 정상적으로 workflow가 수행된 것을 확인할 수 있습니다

 

해당 tool은

fix,feat 두가지의 github log를 파악하여 자동으로 github tag 버전을 생성합니다.

 

또한, 

해당 commit log를 토대로 릴리즈 노트를 자동으로 생성해 준답니다

아주.. 똑똑해

 

이렇게 해서 기똥찬 자동화 도구를 활용하여

배포를 아주 간단하게 만들 수 있었습니다.

 

여러분도 사용해 보셔요 

반응형