-
Github 브랜치 별로 다른 리뷰어 할당 파이프라인 설정하는 법클라우드 2025. 5. 31. 17:50
기존 방식
기존에는 CODEOWNERS 파일을 만들어 dev 브랜치와 main 브랜치에 다른 리뷰어를 할당하고 있었습니다.
- dev브랜치 CODEOWERS 파일
# .github/CODEOWNERS * @100-hours-a-week/Newsum-Fe
- main브랜치 CODEOWERS 파일
# .github/CODEOWNERS * @100-hours-a-week/Newsum-Admin
이렇게 할 때 CODEOWNERS 파일에는 조건문 설정이 불가능하기 때문에
dev → main 브랜치로 PR을 보낼 때, 파일 내용이 달라서 충돌이 발생하였습니다.
그래서 yml 파이프라인을 통해 조건문을 설정하여 브랜치 별로 리뷰어가 다르게 설정하게 수정했습니다.
현재 방식
현재 방식은 yml 파일로 파이프라인을 만들어 브랜치별로 리뷰어로 할당되는 팀을 다르게 설정하였습니다.
파이프라인이 돌아가기 위해 만들어야 하는 부분을 만들고 yml 파일에 만든 부분을 넣어주었습니다.
- PAT(Personal Access Token) 발급
- 레포지토리 Secret 설정
- 리뷰할 팀 설정
- yml파일에 만든 부분 추가
PAT(Personal Access Token) 발급
깃허브 프로필에 빨간 네모 박스로 표시되어 있는 Settings에 들어갑니다.
그리고 사이드바 맨 아래에 있는 Developer Settings에 들어갑니다.
그리고 Personal access Token의 Tokens(classic)으로 들어가고 Generate Tokens를 누릅니다.
그러면 Token과 classic Token이 나오는데 저는 classic Token을 선택하였습니다.
classic Token의 보안상 허점을 개선하기 위해 보안 강화 목적으로 Token이 나왔다고 합니다.
주요 차이점은 classic Token은 전체 조직 혹은 레포에 대한 권한을 줄 수 있고, Token은 레포별 권한 관리 등이 된다고 합니다.
근데 권한 제어를 해서 토큰을 발급하려고 Only select repositories를 선택해서 레포 목록을 보니 조직의 레포는 나오지 않아서 classic Token을 사용하여 하였습니다.
생성하는 페이지에서 repo, workflow, admin:repo_hook 을 체크하고 토큰을 생성합니다.
그리고 생성된 토큰 정보는 한번만 나오니 안전한 곳에 복사해둡니다.
레포지토리 Secret 설정
레포지토리의 Admin 권한이 있어야 할 수 있습니다.
레포지토리 - Settings에 들어갑니다.
사이드바에 Secrets and Variable의 actions 탭에 들어갑니다.
저기서 Repository secrets에서 새로운 아까 복사했던 PAT를 넣어줍니다.
저는 REVIEW_TOKEN이라는 이름으로 넣어주었습니다.
리뷰할 팀 설정
Organization- Teams 에서 팀을 생성합니다.
팀을 생성하고 각 팀에 맞는 리뷰어를 할당해줍니다.
팀의 Maintainer라면 Settings 탭이 나오는데 탭을 눌러서 Enable auto assignment를 눌러줍니다.
저는 팀이 3명이면 리뷰어를 3명으로 할당했습니다.
이렇게 되면 누군가 하겠지라는 생각으로 리뷰를 잘 안하게 된다고 하는데, 프로젝트 초기 단계여서 빠른 개발이 요구되기 때문에 누군가 빠르게 리뷰하고 승인을 해주는 것을 목표로 하여 3명으로 하였습니다.
만약에 팀이 3명인데 리뷰어를 1명으로 한다면 Routing Algorithm에 따라 리뷰어가 알고리즘에 맞게 할당되어 책임을 명확히 할 수 있다고 합니다.
각 항목의 내용은 다음과 같다고 합니다.
항목설명
Only notify requested team members 팀과 팀원 모두가 리뷰 요청을 받은 경우, 팀 전체에게 알리지 않고 지정된 팀원에게만 알림을 보냅니다. Enable auto assignment 이 옵션을 활성화하면, 팀에 대한 리뷰 요청이 들어왔을 때 개별 팀원에게 자동으로 리뷰를 분배합니다. ※ 단, PR에 커밋한 팀원이나 상태가 Busy인 팀원은 제외됩니다. How many team members should be assigned to review? 자동 할당될 리뷰어 수를 지정합니다. 예: 3명 Routing algorithm 리뷰어 선택 방식을 정합니다. - Round robin: 순환 방식 (최근 리뷰한 사람은 다음 순번으로 넘어감) Never assign certain team members 특정 팀원을 리뷰 자동 할당 대상에서 제외할 수 있는 설정 (체크하면 개별 지정 가능) Child team members 이 팀에 속한 하위 팀의 팀원도 리뷰어 후보에 포함시킬지를 결정합니다. Count existing requests 이미 리뷰 요청을 받은 팀원도 리뷰어 수 계산에 포함시킬지를 결정합니다. 예: PR마다 3명씩 지정할 때, 이미 한 명이 지정되어 있으면 2명만 추가할지 여부 Team review request 팀 전체에 대한 리뷰 요청을 자동 리뷰어로 개별 할당 후 삭제할지 여부입니다. 체크하면 팀 이름은 리뷰어 목록에서 사라지고 개별 팀원만 표시됩니다. yml파일에 만든 부분 추가
# .github/workflows/reviewers.yml name: Set reviewers based on branch on: pull_request: types: [opened, synchronize, reopened] jobs: set-reviewers: runs-on: ubuntu-latest permissions: pull-requests: write # PR에 리뷰어를 추가할 수 있는 권한을 부여 steps: # feature to dev로 PR 올라왔을 때 - name: feature에서 dev로 PR 올라올 때 FE팀으로 리뷰어 설정 if: github.base_ref == 'dev' && github.head_ref != 'main' run: | # GitHub 조직에 속한 팀 목록을 가져오기(팀 슬러그 디버깅용) teams=$(curl -s -H "Authorization: token ${{ secrets.REVIEW_TOKEN }}" \\ <https://api.github.com/orgs/100-hours-a-week/teams?per_page=100> | jq -r '.[].slug') echo "Teams: $teams" # 팀 목록 출력 # 프론트 팀을 리뷰어로 설정 curl -s -X POST -H "Authorization: token ${{ secrets.REVIEW_TOKEN }}" \\ -d '{"team_reviewers": ["newsum_fe"]}' \\ <https://api.github.com/repos/100-hours-a-week/17-newsum-fe/pulls/$>{{ github.event.pull_request.number }}/requested_reviewers # dev to main으로 PR 올라왔을 때 - name: dev에서 main으로 PR 올라올 때 관리자 팀으로 리뷰어 설정 if: github.base_ref == 'main' && github.head_ref == 'dev' run: | # GitHub 조직에 속한 팀 목록을 가져오기(팀 슬러그 디버깅용) teams=$(curl -s -H "Authorization: token ${{ secrets.REVIEW_TOKEN }}" \\ <https://api.github.com/orgs/100-hours-a-week/teams?per_page=100> | jq -r '.[].slug') echo "Teams: $teams" # 팀 목록 출력 # 관리자 팀을 리뷰어로 설정 curl -s -X POST -H "Authorization: token ${{ secrets.REVIEW_TOKEN }}" \\ -d '{"team_reviewers": ["newsum_admin"]}' \\ <https://api.github.com/repos/100-hours-a-week/17-newsum-fe/pulls/$>{{ github.event.pull_request.number }}/requested_reviewers
이 부분에서 2번 단계에서 설정했던 토큰을 가져와 팀의 slug가 뭔지 가져옵니다.
teams=$(curl -s -H "Authorization: token ${{ secrets.REVIEW_TOKEN }}" \\ <https://api.github.com/orgs/100-hours-a-week/teams?per_page=100> | jq -r '.[].slug')
팀에 보이는 이름은 Newsum_Fe 등 대문자가 섞여있는데 slug는 소문자인 경우가 많았습니다.
그래서 Newsum_Fe로 하면 인식하지 못하고 newsum_fe로 해야 리뷰어 할당이 되었습니다.
그래서 팀의 슬러그를 알아보기 위해 REVIEW_TOKEN을 통해 팀 slug 목록을 가져와 출력하였습니다.
Teams: 1 1-cracre 10 10-1 11 12 13-cafeboo 14 15 16 17 18 19 2 2-1 20 21 22 3 3-1 4 4-1 5 5-1 6 6-ark 7 7-1 8 8-nemo 9 9-bluestarfish ai-in-pangyo-2nd cloud-in-jeju-1st cloud-in-jeju-2nd full-stack-in-pangyo-2nd jeju-2nd-1 jeju-2nd-10 jeju-2nd-3 jeju-2nd-4 jeju-2nd-5 jeju-2nd-7 jeju-2nd-8 jeju-2nd-9 ktb-in-pangyo-2nd newsum_admin newsum_ai newsum_be newsum_cloud newsum_fe newsum_freepass pangyo-2nd-mentors
파이프라인이 돈 결과 다음과 같은 slug들이 나왔습니다.
그리고 ?per_page=100 이 부분을 추가해줬는데, 한 페이지에 출력되는 팀이 20개정도 밖에 안되는데 팀 슬러그를 확인할 수 없어서 다음 부분을 추가하여 모든 팀이 출력되게 하였습니다.
그리고 출력된 슬러그를 team_reviewers 부분에 추가하여 팀의 인원들이 리뷰어로 할당되게 하였습니다.
curl -s -X POST -H "Authorization: token ${{ secrets.REVIEW_TOKEN }}" \\ -d '{"team_reviewers": ["newsum_fe"]}' \\ <https://api.github.com/repos/100-hours-a-week/17-newsum-fe/pulls/$>{{ github.event.pull_request.number }}/requested_reviewers
100-hours-a-week/17-newsum-fe 이 부분을 {조직/레포명} 으로 바꿔주시면 됩니다.
그러면 PR 보낼때 리뷰어가 자동으로 할당되는 것을 볼 수 있습니다.
'클라우드' 카테고리의 다른 글
도커 기본 개념 정리 (0) 2025.06.03 스프링부트 에러로그 디스코드 웹훅으로 알람 전송하는 방법 (1) 2025.06.02 React CI/CD 파이프라인 분리 (0) 2025.05.30 AWS 비용 계산(2차 버전) (1) 2025.05.30 AWS 비용 계산(초기) (1) 2025.05.28