< BACK TO BLOG

κΉƒν—ˆλΈŒ μ›Œν¬ν”Œλ‘œμš°λ₯Ό ν™œμš©ν•œ μžλ™ ν’€ λ¦¬ν€˜μŠ€νŠΈ μž‘μ„±

πŸ—“οΈ2023-09-10

κ°œμš”

κΉƒ ν”Œλ‘œμš° Git flow

μ½”λ“œμ˜ 버전 μ œμ–΄λ₯Ό μœ„ν•΄ κΉƒ Git 을 μ‚¬μš©ν•˜λ©΄ 보톡 κΉƒ ν”Œλ‘œμš° Git flow λ₯Ό ν™œμš©ν•˜κ³  계싀 κ²ƒμœΌλ‘œ μƒκ°ν•©λ‹ˆλ‹€.

ν†΅μƒμ μœΌλ‘œ κΉƒ ν”Œλ‘œμš°λ₯Ό ν™œμš©ν•˜λ©΄ 기본이 λ˜λŠ” 브랜치 (보톡 main) 와 μ½”λ“œ ν†΅ν•©μš© 브랜치 (보톡 dev), μž‘μ—…μš© 브랜치 (features/*, fix/*, …) … λ“± μ—¬λŸ¬ 브랜치λ₯Ό 관리해야 ν•©λ‹ˆλ‹€.

μž‘μ—…μ΄ μ™„λ£Œλœ μ½”λ“œλŠ” μ—¬λŸ¬ 단계λ₯Ό 거쳐 κΈ°λ³Έ 브랜치둜 λ³‘ν•©λ©λ‹ˆλ‹€.

이 λ•Œ, λΈŒλžœμΉ˜κ°„ 병합과 μ½”λ“œ 리뷰λ₯Ό μœ„ν•΄ κΉƒν—ˆλΈŒμ˜ ν’€ λ¦¬ν€˜μŠ€νŠΈ κΈ°λŠ₯을 많이 ν™œμš©ν•˜κ³  계싀 κ²ƒμœΌλ‘œ μƒκ°ν•©λ‹ˆλ‹€.

ν˜„μž¬ μƒνƒœ

μ œκ°€ 보톡 κ΄€λ¦¬λŠ” μ €μž₯μ†ŒλŠ” μ•„λž˜μ™€ 같이 μ²˜λ¦¬ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

  1. μž‘μ—… 브랜치 (features/1-some-feature)μ—μ„œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ³ , μ½”λ“œ 톡합을 μœ„ν•œ 브랜치 (dev)둜 ν’€ λ¦¬ν€˜μŠ€νŠΈλ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€.
  2. μ½”λ“œ 리뷰가 ν•„μš”ν•œ 경우 μ½”λ“œ 리뷰λ₯Ό μ§„ν–‰ν•˜κ³ , κ΄€λ ¨ μ ˆμ°¨κ°€ 마무리되면 μž‘μ—… 브랜치의 변경사항을 μ½”λ“œ 톡합을 μœ„ν•œ λΈŒλžœμΉ˜μ— λ³‘ν•©λ‹ˆλ‹€.
  3. μ½”λ“œ 톡합을 μœ„ν•œ 브랜치의 μ½”λ“œκ°€ κ²Œμ‹œ λ“±μ˜ μ‚¬μœ λ‘œ κΈ°λ³Έ 브랜치둜 λ³‘ν•©λ˜μ–΄μ•Ό ν•˜λŠ” 경우, μ½”λ“œ 톡합을 μœ„ν•œ λΈŒλžœμΉ˜μ—μ„œ κΈ°λ³Έ 브랜치둜 λ³‘ν•©λ˜λŠ” ν’€ λ¦¬ν€˜μŠ€νŠΈλ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€.
  4. μž‘μ„±λœ ν’€ λ¦¬ν€˜μŠ€νŠΈλŠ” ν•„μš”ν•œ 절차λ₯Ό 마친 ν›„ κΈ°λ³Έ 브랜치둜 λ³‘ν•©ν•©λ‹ˆλ‹€.

μž‘μ—… λΈŒλžœμΉ˜μ—μ„œ μ½”λ“œ 톡합을 μœ„ν•œ 브랜치둜의 ν’€ λ¦¬ν€˜μŠ€νŠΈ μž‘μ„±μ€ μžλ™ν™”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μžλ™ν™”ν•˜λ €λ©΄ 컀밋 λ©”μ‹œμ§€ λ˜λŠ” λ‹€λ₯Έ 방법을 톡해 κ°€λŠ₯ν•˜κ² μ§€λ§Œ, μ‹œκ°„μ΄ 흐λ₯΄λ©΄ 잘 기얡이 λ‚˜μ§€ μ•ŠλŠ” λ“±μ˜ μ‚¬μœ λ‘œ μ˜λ―Έκ°€ μ—†μ–΄μ Έ λ²„λ ΈμŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ, μž‘μ—… λΈŒλžœμΉ˜μ—μ„œ μ½”λ“œ 톡합을 μœ„ν•œ 브랜치둜의 ν’€ λ¦¬ν€˜μŠ€νŠΈκ°€ μ™„λ£Œλ˜λŠ” 경우 이 ν›„ μž‘μ„±μ΄ ν•„μš”ν•œ ν’€ λ¦¬ν€˜μŠ€νŠΈλŠ” μžλ™ν™”ν•˜λ©΄ 수고λ₯Ό 쀄일 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

μžλ™ν™”

κΉƒν—ˆλΈŒμ˜ μ›Œν¬ν”Œλ‘œμš°λŠ” μ—¬λŸ¬κ°€μ§€ 트리거λ₯Ό μ œκ³΅ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

이 쀑 ν’€ λ¦¬ν€˜μŠ€νŠΈκ°€ μ™„λ£Œλ˜μ—ˆμ„ λ•Œ, μ§€μ •λœ μ›Œν¬ν”Œλ‘œμš°λ₯Ό μ‹€ν–‰ν•˜λŠ” 트리거λ₯Ό ν™œμš©ν•˜λ©΄ λ˜κ² λ‹€κ³  μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€.

name: 'Wokring branch pull closed as completed'

on: # rebuild any PRs and main branch changes
    pull_request:
        types: ['closed']

jobs:
    create-pr-to-main:
        if: github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'dev'
        # ...

μœ„ μ›Œν¬ν”Œλ‘œμš° μ •μ˜λŠ” ν’€ λ¦¬ν€˜μŠ€νŠΈκ°€ μ™„λ£Œλ˜λ©΄ 트리거 λ˜λŠ” μ›Œν¬ν”Œλ‘œμš°μž…λ‹ˆλ‹€.

그리고, create-pr-to-main μž‘μ—…μ€ ν˜„μž¬ 이벀트 정보쀑 ν’€ λ¦¬ν€˜μŠ€νŠΈκ°€ λ³‘ν•©λ˜κ³ , ν’€ λ¦¬ν€˜μŠ€νŠΈμ˜ 베이슀 λΈŒλžœμΉ˜κ°€ dev 브랜치면 μ‹€ν–‰λ©λ‹ˆλ‹€.

그리고, ν’€ λ¦¬ν€˜μŠ€νŠΈμ˜ μž‘μ„±μ€ κΉƒν—ˆλΈŒ μ»€λ§¨λ“œλΌμΈ 도ꡬ ghλ₯Ό ν™œμš©ν•˜λ©΄ μ»€λ§¨λ“œλΌμΈμ—μ„œ κ°„νŽΈν•˜κ²Œ μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν’€ λ¦¬ν€˜μŠ€νŠΈ μž‘μ„± μžλ™ν™”

ν’€ λ¦¬ν€˜μŠ€νŠΈμ˜ μž‘μ„±

ν’€ λ¦¬ν€˜μŠ€νŠΈλ₯Ό μž‘μ„±ν•˜λ €λ©΄ 기본적으둜 μ•„λž˜ 정보가 ν•„μš”ν•©λ‹ˆλ‹€.

  1. ν—€λ“œ head 브랜치 이름
  2. 베이슀 base 브랜치 이름
  3. 제λͺ©
  4. λ³Έλ¬Έ

ν—€λ“œ λΈŒλžœμΉ˜λŠ” ν˜„μž¬ μž‘μ—…ν•œ λ‚΄μš©μ— ν•΄λ‹Ήν•˜λŠ” λΈŒλžœμΉ˜μž…λ‹ˆλ‹€. 베이슀 λΈŒλžœμΉ˜λŠ” ν˜„μž¬ μž‘μ—…ν•œ λ‚΄μš©μ„ λ³‘ν•©ν•˜λ €λŠ” λΈŒλžœμΉ˜μž…λ‹ˆλ‹€.

μž‘μ„±ν•˜λ €λŠ” ν’€ λ¦¬ν€˜μŠ€νŠΈμ˜ ν—€λ“œ λΈŒλžœμΉ˜λŠ” μ›Œν¬ν”Œλ‘œμš°λ₯Ό νŠΈλ¦¬κ±°ν•œ μ™„λ£Œλœ ν’€ λ¦¬ν€˜μŠ€νŠΈμ˜ 베이슀 브랜치 이름을 μ‚¬μš©ν•˜λ©΄ λ˜κ² μŠ΅λ‹ˆλ‹€.

μž‘μ„±ν•˜λ €λŠ” ν’€ λ¦¬ν€˜μŠ€νŠΈμ˜ 베이슀 λΈŒλžœμΉ˜λŠ” κΉƒ ν”Œλ‘œμš°μ— μ˜ν•΄ κ²°μ •λ˜λŠ” 뢀뢄이라 μƒκ°ν•©λ‹ˆλ‹€.

κΉƒ ν”Œλ‘œμš°μ˜ μ •μ˜μ— 따라 베이슀 브랜치λ₯Ό κ²°μ •ν•  수 있게 μ§€μ •ν•΄μ£Όμ‹œλ©΄ λ˜κ² μŠ΅λ‹ˆλ‹€.

제λͺ©μ€ κ°„λž΅ν•˜κ²Œ 베이슀 브랜치 μ΄λ¦„μ΄λ‚˜ ν•„μš”ν•œ 정보λ₯Ό κ²°μ •ν•˜λ©΄ 될 것 κ°™μŠ΅λ‹ˆλ‹€.

λ³Έλ¬Έ μ—­μ‹œ ν•„μš”ν•œ λ‚΄μš©μ„ μž‘μ„±ν•˜λ©΄ λ˜κ² μŠ΅λ‹ˆλ‹€. μ €λŠ” μž‘μ„±λ˜λŠ” ν’€ λ¦¬ν€˜μŠ€νŠΈμ— ν¬ν•¨λœ μ™„λ£Œλœ ν’€λ¦¬ν€˜μŠ€νŠΈ λͺ©λ‘μ„ μ‚¬μš©ν•˜κ³  μ‹Άμ–΄μ„œ, κ΄€λ ¨ ν’€λ¦¬ν€˜μŠ€νŠΈλ₯Ό μˆ˜μ§‘ν•˜λŠ” κΉƒν—ˆλΈŒ μ•‘μ…˜μ„ μž‘μ„±ν•΄μ„œ μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

bbonkr/get-overview-of-pull-requests-action μž‘μ„±μ€‘μΈ ν’€ λ¦¬ν€˜μŠ€νŠΈμ˜ 베이슀 브랜치, ν—€λ“œ 브랜치, μ €μž₯μ†Œμ˜ κΈ°λ³Έ 브랜치λ₯Ό μž…λ ₯ν•˜λ©΄ 이전 ν’€ λ¦¬ν€˜μŠ€νŠΈ μ™„λ£Œ μ‹œμ λΆ€ν„° ν˜„μž¬κΉŒμ§€ μ €μž₯μ†Œμ˜ 기본브랜치둜 λ³‘ν•©λœ ν’€ λ¦¬ν€˜μŠ€νŠΈμ˜ 번호 λͺ©λ‘μ„ μ œκ³΅ν•˜λŠ” κΉƒν—ˆλΈŒ μ•‘μ…˜μž…λ‹ˆλ‹€.

κΉƒν—ˆλΈŒ μ›Œν¬ν”Œλ‘œμš°

name: 'PR completed'

on:
    pull_request:
        types: ['closed']

permissions:
    contents: write
    pull-requests: write

env:
    MAIN_BRANCH_NAME: main

jobs:
    create-or-update-pull:
        if: github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'dev'
        runs-on: ubuntu-latest
        steps:
            - name: Checkout
              uses: actions/checkout@v3

            - name: Get overview of PULL_REQUEST
              uses: bbonkr/get-overview-of-pull-requests-action@v1
              id: get_overview
              with:
                  github_token: ${{ github.token }}
                  base: main
                  head: ${{ github.event.pull_request.base.ref }}
                  default_branch: dev

            - name: Create pull
              if: ${{ steps.get_overview.outputs.pull_number == '' }}
              run: |
                  gh pr create --base ${{ env.MAIN_BRANCH_NAME }} \
                    --head ${{ github.event.pull_request.base.ref }} \
                    --label '${{ steps.get_overview.outputs.labels }}' \
                    --project '${{ env.PROJECT_NAME }}' \
                    --reviewer ${{ steps.get_overview.outputs.reviewers }} \
                    --assignee ${{ steps.get_overview.outputs.assignees }} \
                    --body '${{ steps.get_overview.outputs.body }}' \
                    --title 'Release ${{ env.MAIN_BRANCH_NAME }} πŸš€'
              env:
                  GITHUB_TOKEN: ${{ github.token }}

            - name: Update pull
              if: ${{ steps.get_overview.outputs.pull_number != '' }}
              run: |
                  gh pr edit ${{ steps.get_overview.outputs.pull_number }} \
                    --body '${{ steps.get_overview.outputs.body }}' \
                    --title 'Release ${{ env.MAIN_BRANCH_NAME }} πŸš€' \
                    --add-label '${{ steps.get_overview.outputs.labels }}'
              env:
                  GITHUB_TOKEN: ${{ github.token }}

ν’€ μ—…λ°μ΄νŠΈ λͺ…λ Ή μ‹€ν–‰μ‹œ κΆŒν•œκ΄€λ ¨ λ¬Έμ œκ°€ λ°œμƒν•˜λ©΄, pull:write, content:write, org:read κΆŒν•œμ΄ μžˆλŠ” 개인 인증 토큰을 λ§Œλ“€μ–΄ μ‹œν¬λ¦Ώμ— μ €μž₯ ν›„ μ‚¬μš©ν•˜μ‹œλ©΄ λ¬Έμ œκ°€ ν•΄κ²°λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

κΉƒν—ˆλΈŒ μ›Œν¬ν”Œλ‘œμš°κ°€ λ™μž‘ν•œ λ‘œκ·ΈλŠ” μ•„λž˜ λ§ν¬μ—μ„œ ν™•μΈν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ‹œκ°„μ΄ μ§€λ‚˜λ©΄ μ‹€ν–‰ 둜그 접근이 λΆˆκ°€λŠ₯ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

마침

μœ„μ— μ†Œκ°œν•΄λ“œλ¦° μ›Œν¬ν”Œλ‘œμš°λŠ” ν•˜λ‚˜μ˜ 브랜치만 λŒ€μƒμœΌλ‘œ ν•˜κ³  μžˆμ–΄ 크게 도움이 λ˜μ§€ μ•ŠλŠ”λ‹€κ³  생각될 수 μžˆμŠ΅λ‹ˆλ‹€.

병합해야 ν•˜λŠ” 브랜치의 단계가 쑰금 λ§Žμ•„μ§€λ©΄, λ§Žμ€ 수고λ₯Ό 덜 수 μžˆμ„ 것이라 μƒκ°ν•©λ‹ˆλ‹€.

그리고, μ›Œν¬ν”Œλ‘œμš°μ— ν•„μš”ν•˜μ‹  μž‘μ—…μ„ λͺ‡κ°€μ§€ 더 μΆ”κ°€ν•˜μ‹œλ©΄ 직접 관리할 λ‚΄μš©μ΄ 쑰금 μ€„μ–΄λ“€μˆ˜ μžˆμ„ 것이라 μƒκ°ν•˜λ©°, 저와 λΉ„μŠ·ν•œ λ‚΄μš©μœΌλ‘œ κ³ λ―Όν•˜κ³  κ³„μ‹ λΆ„λ“€μ—κ²Œ 도움이 λ˜μ‹œλ©΄ μ’‹κ² μŠ΅λ‹ˆλ‹€.

μΆ”κ°€ν•  단계 μΆ”μ²œ

  • μ½”λ“œμ˜ 버전과 κΉƒ νƒœκ·Έ 동기화
  • μƒˆ 버전 μž‘μ„±μ‹œ κΉƒν—ˆλΈŒ 릴리즈 μž‘μ„±

GitHub Repository


Profile picture

Pon Cheol Ku (ꡬ본철)

Software developer

Other sites

If does not find interesting topic, you might visit other site on below link.

Β© 2024, Built with Gatsby