GitHub 브랜치 보호: CI 통과 전 머지 금지 브랜치 전략 세우기
설정 근거
프로젝트 과정에서 CI/CD 배포 자동화 파이프라인을 구축하였다.
나는 보통 CI 과정에서 애플리케이션의 테스트를 진행하는데, CI가 다 돌지 않아도 변경사항을 운영(prod) 환경으로 Merge할 수 있다는 점에 문제를 느꼈다.
테스트가 실패하는 변경사항이 운영환경에 올라갈 수 있다는 것이 말이 되지 않는다고 생각했다.
이 문제를 해결하기 위해 브랜치 보호 규칙을 떠올리게 되었고 문제 해결과정을 블로그에 기록 및 공유하고자 글을 작성한다.
설정 과정
설정을 적용하려는 Repository 의 Settings에 접속한다.
Settings 탭에서 Branches를 선택한다.
그럼 브랜치 보호 규칙 설정 페이지가 나오는데 'classic branch protection rule'을 클릭해서 설정해보겠다.
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 브랜치의 최근 변경 사항을 반영해야 하도록 강제함으로써 충돌과 같은 문제를 방지할 수 있다.
이제 Create 버튼을 클릭하면 위에서 설정한 브랜치 보호 규칙이 적용된다.
주의사항
Free 요금제의 Organization을 사용중이고, Repository가 private 이라면 해당 설정은 적용되지 않는다.
Organization 기준으로 해당 설정은 'Github Team' 이나 'Enterprice' 요금제를 사용해야만 적용 가능하다!