튜토리얼: 프로젝트를 위한 보호된 워크플로우 구축

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

팀이 새 프로젝트를 시작하면 효율성과 적절한 검토를 균형 있게 유지하는 워크플로우가 필요합니다. GitLab에서는 사용자 그룹을 생성하고, 해당 그룹을 브랜치 보호와 결합한 다음, 승인 규칙으로 해당 보호를 시행할 수 있습니다.

이 튜토리얼에서는 “Excelsior”라는 예제 프로젝트의 1.x1.x.x 릴리즈 브랜치에 대한 보호를 설정하고 미니멀 승인 워크플로우를 생성합니다:

  1. 엔지니어링 그룹 생성
  2. 엔지니어링의 서브그룹 생성
  3. 서브그룹에 사용자 추가
  4. Excelsior 프로젝트 생성
  5. 기본 CODEOWNERS 파일 추가
  6. 승인 규칙 구성
  7. 브랜치에 CODEOWNER 승인 시행
  8. 릴리즈 브랜치 생성

시작하기 전에

  • Maintainer 또는 Owner 역할이 있어야 합니다.
  • 관리자 및 그들의 이메일 주소 목록이 필요합니다.
  • 백엔드 및 프론트엔드 엔지니어 목록과 그들의 이메일 주소가 필요합니다.
  • 브랜치 이름을 위한 시맨틱 버저닝을 이해하고 있어야 합니다.

engineering 그룹 생성

Excelsior 프로젝트를 설정하기 전에 프로젝트를 소유할 그룹을 생성해야 합니다. 여기에서는 엔지니어링 그룹을 설정합니다:

  1. 왼쪽 사이드바에서 맨 위에 있는 새로 만들기 ( )를 선택하고 새 그룹을 선택합니다.
  2. 그룹 생성을 선택합니다.
  3. 그룹 이름Engineering을 입력합니다.
  4. 그룹 URLengineering을 입력합니다.
  5. 가시성 수준비공개로 설정합니다.
  6. GitLab이 가장 유용한 정보를 표시하도록 개인화합니다:
    • 역할시스템 관리자를 선택합니다.
    • 이 그룹을 사용할 사람은 누구입니까?에서 내 회사 또는 팀을 선택합니다.
    • 이 그룹을 무엇에 사용합니까?에서 내 코드를 저장하고 싶습니다.를 선택합니다.
  7. 그룹에 구성원을 초대하는 단계는 건너뜁니다. 이 튜토리얼의 후속 섹션에서 사용자를 추가할 예정입니다.
  8. 그룹 생성을 선택합니다.

다음으로 engineering 그룹에 대한 세분화된 제어를 위해 서브그룹을 추가합니다.

engineering의 서브그룹 생성

engineering 그룹은 좋은 출발점이지만, Excelsior 프로젝트의 백엔드 엔지니어, 프론트엔드 엔지니어 및 관리자들은 서로 다른 업무와 전문 분야를 가지고 있습니다.

여기에서는 작업 유형에 따라 사용자를 세분화하기 위해 엔지니어링 그룹에 managers, frontend, 및 backend라는 세 개의 세분화된 서브그룹을 생성합니다. 그런 다음 이러한 새로운 그룹을 engineering 그룹의 구성원으로 추가합니다.

먼저, 새로운 서브그룹을 생성합니다:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 engineering을 검색합니다. Engineering이라는 그룹을 선택합니다:

    검색 결과의 엔지니어링 그룹

  2. engineering 그룹의 개요 페이지에서 오른쪽 상단 모서리에 있는 새 서브그룹을 선택합니다.
  3. 서브그룹 이름Managers를 입력합니다.
  4. 가시성 수준비공개로 설정합니다.
  5. 서브그룹 생성을 선택합니다.

다음으로, 서브그룹을 engineering 그룹의 구성원으로 추가합니다:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 engineering을 검색합니다. Engineering이라는 그룹을 선택합니다.
  2. 관리 > 구성원을 선택합니다.
  3. 오른쪽 상단에서 그룹 초대를 선택합니다.
  4. 초대할 그룹 선택에서 Engineering / Managers를 선택합니다.
  5. 서브그룹을 추가할 때 Maintainer 역할을 선택합니다.
    이는 서브그룹의 구성원이 engineering 그룹 및 그 프로젝트에 접근할 때 상속받을 수 있는 가장 높은 역할을 구성합니다.
  6. 선택 사항. 만료 날짜를 선택합니다.
  7. 초대를 선택합니다.

이 프로세스를 반복하여 backendfrontend에 대한 서브그룹을 생성합니다. 완료되면 engineering 그룹을 한 번 더 검색합니다. 그 개요 페이지는 다음과 같이 세 개의 서브그룹을 보여야 합니다:

엔지니어링 그룹이 세 개의 서브그룹을 가지고 있음

하위 그룹에 사용자 추가

이전 단계에서 하위 그룹을 상위 그룹(engineering)에 추가할 때 하위 그룹의 구성원을 Maintainer 역할로 제한했습니다. 이는 engineering이 소유한 프로젝트에 대해 그들이 상속받을 수 있는 가장 높은 역할입니다. 결과적으로:

  • 사용자 1은 Guest 역할을 가진 manager 하위 그룹에 추가되며, engineering 프로젝트에서 Guest 역할을 받습니다.
  • 사용자 2는 Owner 역할을 가진 manager 그룹에 추가됩니다. 이 역할은 설정한 최대 역할(Maintainer)보다 높기 때문에 사용자 2는 Owner 대신 Maintainer 역할을 받습니다.

frontend 하위 그룹에 사용자를 추가하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 frontend를 검색합니다. Frontend 그룹을 선택합니다.
  2. 관리 > 구성원을 선택합니다.
  3. 구성원 초대를 선택합니다.
  4. 필드를 작성합니다. 이 사용자가 다른 사람의 작업을 검토하는 경우 기본적으로 Developer 역할을 선택하고 Maintainer로 증가시킵니다.
  5. 초대를 선택합니다.
  6. 모든 프론트엔드 엔지니어를 frontend 하위 그룹에 추가할 때까지 이 단계를 반복합니다.

이제 backendmanagers 그룹에 대해서도 동일하게 하세요. 동일한 사용자가 여러 하위 그룹의 구성원이 될 수 있습니다.

Excelsior 프로젝트 생성

이제 그룹 구조가 설정되었으므로 팀이 작업할 excelsior 프로젝트를 생성합니다. 프론트엔드 및 백엔드 엔지니어가 모두 참여하므로 excelsior는 방금 생성한 작은 하위 그룹이 아닌 engineering에 속해야 합니다.

새로운 excelsior 프로젝트를 생성하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 engineering을 검색합니다. Engineering이라는 그룹을 선택합니다.
  2. engineering 그룹의 개요 페이지에서 왼쪽 사이드바 상단의 새로 만들기( ) 및 이 그룹에서 > 새 프로젝트/저장소를 선택합니다.
  3. 빈 프로젝트 만들기를 선택합니다.
  4. 프로젝트 세부 정보를 입력합니다:
    • 프로젝트 이름 필드에 Excelsior를 입력합니다. 프로젝트 슬러그excelsior로 자동 입력되어야 합니다.
    • 가시성 수준에서 퍼블릭을 선택합니다.
    • README로 리포지토리 초기화를 선택하여 리포지토리에 초기 파일을 추가합니다.
  5. 프로젝트 만들기를 선택합니다.

GitLab은 당신을 위해 excelsior 프로젝트를 생성하고 해당 홈페이지로 리다이렉트합니다. 다음과 같은 모습이어야 합니다:

새로운 거의 비어 있는 excelsior 프로젝트

다음 단계에서 이 페이지의 기능을 사용할 것입니다.

기본 CODEOWNERS 파일 추가

프로젝트의 루트 디렉터리에 CODEOWNERS 파일을 추가하여 리뷰를 올바른 하위 그룹으로 라우팅합니다. 이 예제는 네 가지 규칙을 설정합니다:

  • 모든 변경 사항은 engineering 그룹의 누군가에 의해 검토되어야 합니다.
  • 관리자는 CODEOWNERS 파일 자체에 대한 모든 변경 사항을 검토해야 합니다.
  • 프론트엔드 엔지니어는 프론트엔드 파일의 변경 사항을 검토해야 합니다.
  • 백엔드 엔지니어는 백엔드 파일의 변경 사항을 검토해야 합니다.

알림:
GitLab Free는 선택적 리뷰만 지원합니다. 리뷰를 필수로 만들려면 GitLab Premium 또는 Ultimate가 필요합니다.

excelsior 프로젝트에 CODEOWNERS 파일을 추가하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 Excelsior를 검색합니다. Excelsior라는 프로젝트를 선택합니다.
  2. 브랜치 이름 옆의 플러스 아이콘( )을 선택한 다음 새 파일을 선택합니다: 프로젝트에서 새 파일 생성
  3. 파일 이름CODEOWNERS를 입력합니다. 이렇게 하면 프로젝트의 루트 디렉터리에 CODEOWNERS라는 파일이 생성됩니다.
  4. 이 예제를 편집 영역에 붙여넣고 그룹 구조와 맞지 않는 경우 @engineering/을 변경합니다:

    # 모든 변경 사항은 engineering 그룹의 누군가에 의해 검토되어야 합니다
    * @engineering
    
    # 관리자는 이 파일에 대한 모든 변경 사항을 검토해야 합니다
    CODEOWNERS @engineering/managers
    
    # 프론트엔드 파일은 FE 엔지니어가 검토해야 합니다
    [Frontend] @engineering/frontend
    *.scss
    *.js
    
    # 백엔드 파일은 BE 엔지니어가 검토해야 합니다
    [Backend] @engineering/backend
    *.rb
    
  5. 커밋 메시지에 다음 내용을 붙여넣습니다:

    새로운 CODEOWNERS 파일 추가
    
    다음을 위해 작은 CODEOWNERS 파일을 생성합니다:
    - 백엔드 및 프론트엔드 변경 사항을 올바른 팀으로 라우팅
    - CODEOWNERS 파일 변경 사항을 관리자에게 라우팅
    - 모든 변경 사항이 검토되도록 요청
    
  6. 변경 사항 커밋을 선택합니다.

이제 CODEOWNERS 파일이 프로젝트의 main 브랜치에 배치되었으며, 이 프로젝트에서 생성된 모든 미래 브랜치에서 사용할 수 있습니다.

승인 규칙 구성

CODEOWNERS 파일은 디렉터리 및 파일 유형에 대한 적절한 검토자를 설명합니다. 승인 규칙은 병합 요청을 이러한 검토자에게 전달합니다. 여기에서 새 CODEOWNERS 파일의 정보를 사용하고 릴리스 브랜치에 대한 보호를 추가하는 승인 규칙을 설정합니다:

  1. 왼쪽 사이드바에서 Search or go to를 선택하고 Excelsior를 검색합니다. Excelsior라는 프로젝트를 선택합니다.
  2. Settings > Merge requests를 선택합니다.
  3. Merge request approvals 섹션에서 Approval rules로 스크롤합니다.
  4. Add approval rule을 선택합니다.
  5. Enforce CODEOWNERS라는 규칙을 만듭니다.
  6. All protected branches를 선택합니다.
  7. GitLab Premium 및 GitLab Ultimate에서 규칙을 필수로 만들기 위해, Approvals required1로 설정합니다.
  8. 검토자로 managers 그룹을 추가합니다.
  9. Add approval rule을 선택합니다.
  10. Approval settings로 스크롤하고 Prevent editing approval rules in merge requests가 선택되었는지 확인합니다.
  11. Save changes를 선택합니다.

추가하면, Enforce CODEOWNERS 규칙은 다음과 같이 보입니다:

새 승인 규칙 적용됨

브랜치에서 CODEOWNER 승인 시행

프로젝트에 대한 여러 보호 기능이 구성되었으며, 이제 이러한 보호 기능을 결합하여 프로젝트의 중요한 브랜치를 보호할 준비가 되었습니다:

  • 사용자가 논리적인 그룹 및 하위 그룹으로 분류되어 있습니다.
  • CODEOWNERS 파일은 파일 유형 및 디렉터리에 대한 주제 전문가를 설명합니다.
  • 승인 규칙은 주제 전문가가 변경 내용을 검토하도록 (GitLab Free에서) 권장하거나 (GitLab Premium 및 GitLab Ultimate에서) 요구합니다.

excelsior 프로젝트는 릴리스 브랜치 이름에 대해 시맨틱 버전 관리를 사용하므로, 릴리스 브랜치가 1.x1.x.x 패턴을 따른다는 것을 알 수 있습니다. 이 브랜치에 추가되는 모든 코드는 주제 전문가에 의해 검토되어야 하며, 관리자가 무엇이 릴리스 브랜치에 병합될지를 최종 결정해야 합니다.

한 번에 하나의 브랜치에 대한 보호를 만드는 대신, 여러 브랜치를 보호하기 위해 와일드카드 브랜치 규칙을 구성합니다:

  1. 왼쪽 사이드바에서 Search or go to를 선택하고 Excelsior를 검색합니다. Excelsior라는 프로젝트를 선택합니다.
  2. Settings > Repository를 선택합니다.
  3. Protected branches를 확장합니다.
  4. Branch 드롭다운 목록에서 1.*를 입력한 다음 Create wildcard 1.*를 선택합니다.
  5. 모든 사람이 직접 커밋을 푸시하는 대신 병합 요청을 제출하도록 요구하려면:
    1. Allowed to mergeMaintainers로 설정합니다.
    2. Allowed to push and mergeNo one으로 설정합니다.
    3. Allowed to force push는 비활성화된 상태로 유지합니다.
  6. GitLab Premium 및 GitLab Ultimate에서는 Code Owners가 자신이 작업하는 파일에 대한 변경 사항을 검토하도록 요구하려면 Require approval from code owners를 전환합니다.
  7. Protect를 선택합니다.
  8. 브랜치 표에서 Default로 표시된 규칙을 찾습니다. (GitLab 버전에 따라 이 브랜치는 main 또는 master라는 이름일 수 있습니다.) 이 브랜치의 값을 1.* 규칙에서 사용한 설정에 맞게 조정합니다.

규칙이 현재 설정되어 있으며, 1.* 브랜치가 아직 존재하지 않더라도 준비가 완료되었습니다:

main 및 1.x가 이제 보호됨

릴리스 브랜치 생성

모든 브랜치 보호가 설정되었으므로 1.0.0 릴리스 브랜치를 생성할 준비가 되었습니다:

  1. 왼쪽 사이드바에서 Search or go to를 선택하고
    Excelsior를 검색합니다. Excelsior라는 이름의 프로젝트를 선택합니다.

  2. Code > Branches를 선택합니다.

  3. 오른쪽 상단 모서리에서 New branch를 선택합니다. 이름을 1.0.0으로 설정합니다.

  4. Create branch를 선택합니다.

이제 브랜치 보호가 UI에 표시됩니다:

  • 왼쪽 사이드바에서 Code > Branches를 선택합니다. 브랜치 목록에서
    브랜치 1.0.0이 보호됨을 나타내야 합니다:

    브랜치 목록, 1.0.0이 보호되어 있음을 표시

  • 왼쪽 사이드바에서 Settings > Repository를 선택한 다음,
    Branch rules를 확장하여 모든 보호된 브랜치에 대한 세부정보를 확인합니다:

    보호된 브랜치 목록과 해당 보호

축하합니다! 귀사의 엔지니어들은 자신의 브랜치에서 독립적으로 작업할 수 있으며,
1.0.0 릴리스 브랜치에 제출된 모든 코드는 주제 전문가에 의해 검토될 것입니다.