- 시작하기 전에
engineering
그룹 생성engineering
의 서브그룹 생성- 하위 그룹에 사용자 추가
- Excelsior 프로젝트 생성
- 기본 CODEOWNERS 파일 추가
- 승인 규칙 구성
- 브랜치에서 CODEOWNER 승인 시행
- 릴리스 브랜치 생성
튜토리얼: 프로젝트를 위한 보호된 워크플로우 구축
팀이 새 프로젝트를 시작하면 효율성과 적절한 검토를 균형 있게 유지하는 워크플로우가 필요합니다. GitLab에서는 사용자 그룹을 생성하고, 해당 그룹을 브랜치 보호와 결합한 다음, 승인 규칙으로 해당 보호를 시행할 수 있습니다.
이 튜토리얼에서는 “Excelsior”라는 예제 프로젝트의 1.x
및 1.x.x
릴리즈 브랜치에 대한 보호를 설정하고 미니멀 승인 워크플로우를 생성합니다:
- 엔지니어링 그룹 생성
- 엔지니어링의 서브그룹 생성
- 서브그룹에 사용자 추가
- Excelsior 프로젝트 생성
- 기본 CODEOWNERS 파일 추가
- 승인 규칙 구성
- 브랜치에 CODEOWNER 승인 시행
- 릴리즈 브랜치 생성
시작하기 전에
- Maintainer 또는 Owner 역할이 있어야 합니다.
- 관리자 및 그들의 이메일 주소 목록이 필요합니다.
- 백엔드 및 프론트엔드 엔지니어 목록과 그들의 이메일 주소가 필요합니다.
- 브랜치 이름을 위한 시맨틱 버저닝을 이해하고 있어야 합니다.
engineering
그룹 생성
Excelsior 프로젝트를 설정하기 전에 프로젝트를 소유할 그룹을 생성해야 합니다. 여기에서는 엔지니어링 그룹을 설정합니다:
- 왼쪽 사이드바에서 맨 위에 있는 새로 만들기 ()를 선택하고 새 그룹을 선택합니다.
- 그룹 생성을 선택합니다.
-
그룹 이름에
Engineering
을 입력합니다. -
그룹 URL에
engineering
을 입력합니다. - 가시성 수준을 비공개로 설정합니다.
- GitLab이 가장 유용한 정보를 표시하도록 개인화합니다:
- 역할에 시스템 관리자를 선택합니다.
- 이 그룹을 사용할 사람은 누구입니까?에서 내 회사 또는 팀을 선택합니다.
- 이 그룹을 무엇에 사용합니까?에서 내 코드를 저장하고 싶습니다.를 선택합니다.
- 그룹에 구성원을 초대하는 단계는 건너뜁니다. 이 튜토리얼의 후속 섹션에서 사용자를 추가할 예정입니다.
- 그룹 생성을 선택합니다.
다음으로 engineering
그룹에 대한 세분화된 제어를 위해 서브그룹을 추가합니다.
engineering
의 서브그룹 생성
engineering
그룹은 좋은 출발점이지만, Excelsior 프로젝트의 백엔드 엔지니어, 프론트엔드 엔지니어 및 관리자들은 서로 다른 업무와 전문 분야를 가지고 있습니다.
여기에서는 작업 유형에 따라 사용자를 세분화하기 위해 엔지니어링 그룹에 managers
, frontend
, 및 backend
라는 세 개의 세분화된 서브그룹을 생성합니다. 그런 다음 이러한 새로운 그룹을 engineering
그룹의 구성원으로 추가합니다.
먼저, 새로운 서브그룹을 생성합니다:
-
왼쪽 사이드바에서 검색 또는 이동을 선택하고
engineering
을 검색합니다.Engineering
이라는 그룹을 선택합니다: -
engineering
그룹의 개요 페이지에서 오른쪽 상단 모서리에 있는 새 서브그룹을 선택합니다. -
서브그룹 이름에
Managers
를 입력합니다. - 가시성 수준을 비공개로 설정합니다.
- 서브그룹 생성을 선택합니다.
다음으로, 서브그룹을 engineering
그룹의 구성원으로 추가합니다:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고
engineering
을 검색합니다.Engineering
이라는 그룹을 선택합니다. - 관리 > 구성원을 선택합니다.
- 오른쪽 상단에서 그룹 초대를 선택합니다.
-
초대할 그룹 선택에서
Engineering / Managers
를 선택합니다. - 서브그룹을 추가할 때 Maintainer 역할을 선택합니다.
이는 서브그룹의 구성원이engineering
그룹 및 그 프로젝트에 접근할 때 상속받을 수 있는 가장 높은 역할을 구성합니다. - 선택 사항. 만료 날짜를 선택합니다.
- 초대를 선택합니다.
이 프로세스를 반복하여 backend
및 frontend
에 대한 서브그룹을 생성합니다. 완료되면 engineering
그룹을 한 번 더 검색합니다. 그 개요 페이지는 다음과 같이 세 개의 서브그룹을 보여야 합니다:
하위 그룹에 사용자 추가
이전 단계에서 하위 그룹을 상위 그룹(engineering
)에 추가할 때 하위 그룹의 구성원을 Maintainer 역할로 제한했습니다. 이는 engineering
이 소유한 프로젝트에 대해 그들이 상속받을 수 있는 가장 높은 역할입니다. 결과적으로:
- 사용자 1은 Guest 역할을 가진
manager
하위 그룹에 추가되며,engineering
프로젝트에서 Guest 역할을 받습니다. - 사용자 2는 Owner 역할을 가진
manager
그룹에 추가됩니다. 이 역할은 설정한 최대 역할(Maintainer)보다 높기 때문에 사용자 2는 Owner 대신 Maintainer 역할을 받습니다.
frontend
하위 그룹에 사용자를 추가하려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고
frontend
를 검색합니다.Frontend
그룹을 선택합니다. - 관리 > 구성원을 선택합니다.
- 구성원 초대를 선택합니다.
- 필드를 작성합니다. 이 사용자가 다른 사람의 작업을 검토하는 경우 기본적으로 Developer 역할을 선택하고 Maintainer로 증가시킵니다.
- 초대를 선택합니다.
- 모든 프론트엔드 엔지니어를
frontend
하위 그룹에 추가할 때까지 이 단계를 반복합니다.
이제 backend
및 managers
그룹에 대해서도 동일하게 하세요. 동일한 사용자가 여러 하위 그룹의 구성원이 될 수 있습니다.
Excelsior 프로젝트 생성
이제 그룹 구조가 설정되었으므로 팀이 작업할 excelsior
프로젝트를 생성합니다. 프론트엔드 및 백엔드 엔지니어가 모두 참여하므로 excelsior
는 방금 생성한 작은 하위 그룹이 아닌 engineering
에 속해야 합니다.
새로운 excelsior
프로젝트를 생성하려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고
engineering
을 검색합니다.Engineering
이라는 그룹을 선택합니다. -
engineering
그룹의 개요 페이지에서 왼쪽 사이드바 상단의 새로 만들기() 및 이 그룹에서 > 새 프로젝트/저장소를 선택합니다. - 빈 프로젝트 만들기를 선택합니다.
- 프로젝트 세부 정보를 입력합니다:
-
프로젝트 이름 필드에
Excelsior
를 입력합니다. 프로젝트 슬러그는excelsior
로 자동 입력되어야 합니다. - 가시성 수준에서 퍼블릭을 선택합니다.
- README로 리포지토리 초기화를 선택하여 리포지토리에 초기 파일을 추가합니다.
-
프로젝트 이름 필드에
- 프로젝트 만들기를 선택합니다.
GitLab은 당신을 위해 excelsior
프로젝트를 생성하고 해당 홈페이지로 리다이렉트합니다. 다음과 같은 모습이어야 합니다:
다음 단계에서 이 페이지의 기능을 사용할 것입니다.
기본 CODEOWNERS 파일 추가
프로젝트의 루트 디렉터리에 CODEOWNERS 파일을 추가하여 리뷰를 올바른 하위 그룹으로 라우팅합니다. 이 예제는 네 가지 규칙을 설정합니다:
- 모든 변경 사항은
engineering
그룹의 누군가에 의해 검토되어야 합니다. - 관리자는 CODEOWNERS 파일 자체에 대한 모든 변경 사항을 검토해야 합니다.
- 프론트엔드 엔지니어는 프론트엔드 파일의 변경 사항을 검토해야 합니다.
- 백엔드 엔지니어는 백엔드 파일의 변경 사항을 검토해야 합니다.
알림:
GitLab Free는 선택적 리뷰만 지원합니다. 리뷰를 필수로 만들려면 GitLab Premium 또는 Ultimate가 필요합니다.
excelsior
프로젝트에 CODEOWNERS 파일을 추가하려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고
Excelsior
를 검색합니다.Excelsior
라는 프로젝트를 선택합니다. - 브랜치 이름 옆의 플러스 아이콘()을 선택한 다음 새 파일을 선택합니다:
-
파일 이름에
CODEOWNERS
를 입력합니다. 이렇게 하면 프로젝트의 루트 디렉터리에CODEOWNERS
라는 파일이 생성됩니다. -
이 예제를 편집 영역에 붙여넣고 그룹 구조와 맞지 않는 경우
@engineering/
을 변경합니다:# 모든 변경 사항은 engineering 그룹의 누군가에 의해 검토되어야 합니다 * @engineering # 관리자는 이 파일에 대한 모든 변경 사항을 검토해야 합니다 CODEOWNERS @engineering/managers # 프론트엔드 파일은 FE 엔지니어가 검토해야 합니다 [Frontend] @engineering/frontend *.scss *.js # 백엔드 파일은 BE 엔지니어가 검토해야 합니다 [Backend] @engineering/backend *.rb
-
커밋 메시지에 다음 내용을 붙여넣습니다:
새로운 CODEOWNERS 파일 추가 다음을 위해 작은 CODEOWNERS 파일을 생성합니다: - 백엔드 및 프론트엔드 변경 사항을 올바른 팀으로 라우팅 - CODEOWNERS 파일 변경 사항을 관리자에게 라우팅 - 모든 변경 사항이 검토되도록 요청
- 변경 사항 커밋을 선택합니다.
이제 CODEOWNERS 파일이 프로젝트의 main
브랜치에 배치되었으며, 이 프로젝트에서 생성된 모든 미래 브랜치에서 사용할 수 있습니다.
승인 규칙 구성
CODEOWNERS 파일은 디렉터리 및 파일 유형에 대한 적절한 검토자를 설명합니다. 승인 규칙은 병합 요청을 이러한 검토자에게 전달합니다. 여기에서 새 CODEOWNERS 파일의 정보를 사용하고 릴리스 브랜치에 대한 보호를 추가하는 승인 규칙을 설정합니다:
- 왼쪽 사이드바에서 Search or go to를 선택하고
Excelsior
를 검색합니다.Excelsior
라는 프로젝트를 선택합니다. - Settings > Merge requests를 선택합니다.
- Merge request approvals 섹션에서 Approval rules로 스크롤합니다.
- Add approval rule을 선택합니다.
-
Enforce CODEOWNERS
라는 규칙을 만듭니다. - All protected branches를 선택합니다.
- GitLab Premium 및 GitLab Ultimate에서 규칙을 필수로 만들기 위해,
Approvals required를
1
로 설정합니다. - 검토자로
managers
그룹을 추가합니다. - Add approval rule을 선택합니다.
- Approval settings로 스크롤하고 Prevent editing approval rules in merge requests가 선택되었는지 확인합니다.
- Save changes를 선택합니다.
추가하면, Enforce CODEOWNERS
규칙은 다음과 같이 보입니다:
브랜치에서 CODEOWNER 승인 시행
프로젝트에 대한 여러 보호 기능이 구성되었으며, 이제 이러한 보호 기능을 결합하여 프로젝트의 중요한 브랜치를 보호할 준비가 되었습니다:
- 사용자가 논리적인 그룹 및 하위 그룹으로 분류되어 있습니다.
- CODEOWNERS 파일은 파일 유형 및 디렉터리에 대한 주제 전문가를 설명합니다.
- 승인 규칙은 주제 전문가가 변경 내용을 검토하도록 (GitLab Free에서) 권장하거나 (GitLab Premium 및 GitLab Ultimate에서) 요구합니다.
excelsior
프로젝트는 릴리스 브랜치 이름에 대해 시맨틱 버전 관리를 사용하므로, 릴리스 브랜치가 1.x
및 1.x.x
패턴을 따른다는 것을 알 수 있습니다. 이 브랜치에 추가되는 모든 코드는 주제 전문가에 의해 검토되어야 하며, 관리자가 무엇이 릴리스 브랜치에 병합될지를 최종 결정해야 합니다.
한 번에 하나의 브랜치에 대한 보호를 만드는 대신, 여러 브랜치를 보호하기 위해 와일드카드 브랜치 규칙을 구성합니다:
- 왼쪽 사이드바에서 Search or go to를 선택하고
Excelsior
를 검색합니다.Excelsior
라는 프로젝트를 선택합니다. - Settings > Repository를 선택합니다.
- Protected branches를 확장합니다.
-
Branch 드롭다운 목록에서
1.*
를 입력한 다음 Create wildcard1.*
를 선택합니다. - 모든 사람이 직접 커밋을 푸시하는 대신 병합 요청을 제출하도록 요구하려면:
- Allowed to merge를 Maintainers로 설정합니다.
- Allowed to push and merge를 No one으로 설정합니다.
- Allowed to force push는 비활성화된 상태로 유지합니다.
- GitLab Premium 및 GitLab Ultimate에서는 Code Owners가 자신이 작업하는 파일에 대한 변경 사항을 검토하도록 요구하려면 Require approval from code owners를 전환합니다.
- Protect를 선택합니다.
- 브랜치 표에서
Default
로 표시된 규칙을 찾습니다. (GitLab 버전에 따라 이 브랜치는main
또는master
라는 이름일 수 있습니다.) 이 브랜치의 값을1.*
규칙에서 사용한 설정에 맞게 조정합니다.
규칙이 현재 설정되어 있으며, 1.*
브랜치가 아직 존재하지 않더라도 준비가 완료되었습니다:
릴리스 브랜치 생성
모든 브랜치 보호가 설정되었으므로 1.0.0 릴리스 브랜치를 생성할 준비가 되었습니다:
-
왼쪽 사이드바에서 Search or go to를 선택하고
Excelsior
를 검색합니다.Excelsior
라는 이름의 프로젝트를 선택합니다. -
Code > Branches를 선택합니다.
-
오른쪽 상단 모서리에서 New branch를 선택합니다. 이름을
1.0.0
으로 설정합니다. -
Create branch를 선택합니다.
이제 브랜치 보호가 UI에 표시됩니다:
-
왼쪽 사이드바에서 Code > Branches를 선택합니다. 브랜치 목록에서
브랜치1.0.0
이 보호됨을 나타내야 합니다: -
왼쪽 사이드바에서 Settings > Repository를 선택한 다음,
Branch rules를 확장하여 모든 보호된 브랜치에 대한 세부정보를 확인합니다:
축하합니다! 귀사의 엔지니어들은 자신의 브랜치에서 독립적으로 작업할 수 있으며,
1.0.0 릴리스 브랜치에 제출된 모든 코드는 주제 전문가에 의해 검토될 것입니다.