GitHub 브랜치 보호: CI 통과 전 머지 금지 브랜치 전략 세우기

 

etc-image-0

 

설정 근거

프로젝트 과정에서 CI/CD 배포 자동화 파이프라인을 구축하였다.

나는 보통 CI 과정에서 애플리케이션의 테스트를 진행하는데, CI가 다 돌지 않아도 변경사항을 운영(prod) 환경으로 Merge할 수 있다는 점에 문제를 느꼈다.

테스트가 실패하는 변경사항이 운영환경에 올라갈 수 있다는 것이 말이 되지 않는다고 생각했다.

 

이 문제를 해결하기 위해 브랜치 보호 규칙을 떠올리게 되었고 문제 해결과정을 블로그에 기록 및 공유하고자 글을 작성한다.

 

 

 

설정 과정

etc-image-1
Github Repository - Settings

설정을 적용하려는 Repository 의 Settings에 접속한다.

 

 

스크린샷 2024-12-14 01.01.20.png
Settings - Branches

Settings 탭에서 Branches를 선택한다.

 

 

스크린샷 2024-12-14 01.01.25.png
Branch protection rules - Add classic branch protection rule

그럼 브랜치 보호 규칙 설정 페이지가 나오는데 'classic branch protection rule'을 클릭해서 설정해보겠다.

 

 

etc-image-4
브랜치 규칙 설정

Branch name pattern

브랜치 이름 패턴을 설정하는 입력창이다.

나는 prod 브랜치에 대해서 이 규칙을 적용할 계획이므로 'prod'를 입력해주었다.

 

이렇게 설정하면 feat, refactor 등의 브랜치에서 prod로 Merge 하고자 할 때, 지금 설정하는 보호 규칙이 적용된다.

이를 통해 prod 브랜치에 대한 Merge를 더욱 안전하게 만들 수 있다.

 

Require status checks to pass before merging

오늘 소개하고자하는 핵심 기능이다.

'Require status checks to pass before merging' 선택을 통해 merge하기 전 브랜치의 상태를 점검할 수 있다.

 

나는 CI 스크립트에서 'test' 라는 job을 통해 애플리케이션의 테스트를 수행한다.

바로 이 test job을 Merge 전에 체크하도록 함으로써 test job이 돌지 않으면 prod 브랜치에 변경사항을 Merge 할 수 없도록 구성한다.

이를 통해 안전한 브랜치 운용이 가능해진다.

 

Require branches to be up to date before merging

Merge 하기 전, 브랜치가 최신 상태여야 함을 강제할 수 있는 규칙이다.

머지 전 prod 브랜치의 최근 변경 사항을 반영해야 하도록 강제함으로써 충돌과 같은 문제를 방지할 수 있다.

 

 

스크린샷 2024-12-14 01.04.23.png

이제 Create 버튼을 클릭하면 위에서 설정한 브랜치 보호 규칙이 적용된다.

 

 

주의사항

etc-image-6

Free 요금제의 Organization을 사용중이고, Repository가 private 이라면 해당 설정은 적용되지 않는다.

Organization 기준으로 해당 설정은 'Github Team' 이나 'Enterprice' 요금제를 사용해야만 적용 가능하다!