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

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

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

이 튜토리얼에서는 “Excelsior”라는 예제 프로젝트의 1.x1.x.x 릴리스 브랜치에 대한 보호를 설정하고, 프로젝트에 대한 최소한의 승인 워크플로를 만듭니다:

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

시작하기 전에

  • 유지보수자 또는 소유자 권한이 있어야 합니다.
  • 관리자 및 이메일 주소 목록이 필요합니다.
  • 백엔드 및 프론트엔드 엔지니어 목록과 이메일 주소 목록이 필요합니다.
  • 브랜치 이름에 대한 의미론적 버전 관리를 이해해야 합니다.

engineering 그룹 생성

Excelsior 프로젝트를 설정하기 전에 프로젝트를 소유할 그룹을 만들어야 합니다. 여기서는 Engineering 그룹을 설정합니다:

  1. 왼쪽 사이드바에서 위쪽에 있는 새로 만들기 () 및 새 그룹을 선택합니다.
  2. 그룹 만들기를 선택합니다.
  3. 그룹 이름Engineering을 입력합니다.
  4. 그룹 URLengineering을 입력합니다.
  5. 가시성 수준비공개로 설정합니다.
  6. GitLab이 가장 유용한 정보를 표시할 수 있도록 개인화하세요:
    • 역할에서 시스템 관리자를 선택합니다.
    • 이 그룹을 사용할 대상에서 내 회사 또는 팀을 선택합니다.
    • 이 그룹을 사용하려는 목적에서 내 코드를 저장하려고 합니다를 선택합니다.
  7. 이 그룹에 멤버를 초대하는 단계는 건너뜁니다. 이 튜토리얼의 나중 단계에서 사용자를 추가할 예정입니다.
  8. 그룹 만들기를 선택합니다.

그 다음, 이 engineering 그룹에 더 세부적인 제어를 위해 서브그룹을 추가할 것입니다.

engineering에서 서브그룹 생성

engineering 그룹은 좋은 시작입니다만, Excelsior 프로젝트의 백엔드 엔지니어, 프론트엔드 엔지니어 및 관리자들은 서로 다른 작업과 특화된 영역을 가지고 있습니다.

여기서는 Engineering 그룹 내에서 세부적으로 백엔드, 프론트엔드 및 관리자 서브그룹을 만들어 작업 유형에 따라 사용자를 분류한 다음, 이러한 새 그룹을 engineering 그룹의 구성원으로 추가할 것입니다.

먼저, 새로운 서브그룹을 만듭니다:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 engineering을 검색합니다. 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 그룹에는 세 개의 서브그룹이 있습니다

서브그룹에 사용자 추가

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

  • 사용자 1은 manager 서브그룹에 Guest 역할로 추가되어 engineering 프로젝트에 Guest 역할을 받습니다.
  • 사용자 2는 manager 그룹에 소유자 역할로 추가됩니다. 이 역할은 설정한 최대 역할(Maintainer)보다 높기 때문에 사용자 2는 소유자 대신 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 파일은 이제 excelsior 프로젝트의 main 브랜치에 있으며, 이 프로젝트에서 생성된 모든 미래 브랜치에서 사용할 수 있습니다.

승인 규칙 구성

CODEOWNERS 파일은 디렉터리 및 파일 유형에 대한 적절한 리뷰어를 설명합니다. 승인 규칙은 해당 리뷰어로 병합 요청을 보냅니다. 여기서 새 CODEOWNERS 파일의 정보를 사용하여 승인 규칙을 설정하고 릴리스 브랜치에 대한 보호 기능을 추가할 것입니다:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 Excelsior을 검색합니다. Excelsior이라는 프로젝트를 선택합니다.
  2. 설정 > 병합 요청을 선택합니다.
  3. 병합 요청 승인 섹션에서 승인 규칙로 스크롤합니다.
  4. 승인 규칙 추가를 선택합니다.
  5. Enforce CODEOWNERS라는 규칙을 생성합니다.
  6. 모든 보호된 브랜치를 선택합니다.
  7. GitLab Premium 및 GitLab Ultimate에서는 승인 필요 수1로 설정하여 이 규칙을 필수로 만듭니다.
  8. managers 그룹을 승인자로 추가합니다.
  9. 승인 규칙 추가를 선택합니다.
  10. 승인 설정으로 스크롤하여 병합 요청에서 승인 규칙 편집 방지가 선택되었는지 확인합니다.
  11. 변경 사항 저장을 선택합니다.

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

새로운 승인 규칙이 적용됨

브랜치에서 CODEOWNER 승인 강제

프로젝트의 여러 유형을 보호하기 위해 여러 가지 보호 기능을 구성한 상태이고 이제 이러한 보호 기능을 결합하여 프로젝트의 중요한 브랜치를 안전하게 하려고 합니다:

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

귀하의 excelsior 프로젝트는 릴리스 브랜치 이름에 대해 의미 있는 버전 을 사용하므로 릴리스 브랜치는 1.x1.x.x와 같은 패턴을 따르는 것을 알 수 있습니다. 이러한 브랜치에 추가된 모든 코드는 주제 전문가에 의해 검토되어야 하며, 매니저가 무엇을 통합할지 최종적으로 결정해야 합니다.

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

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 Excelsior을 검색합니다. Excelsior이라는 프로젝트를 선택합니다.
  2. 설정 > 저장소를 선택합니다.
  3. 보호된 브랜치를 확장합니다.
  4. 브랜치 드롭다운 목록에서 1.*을 입력한 다음 와일드카드 1.* 만들기를 선택합니다.
  5. 커밋을 직접 푸시하는 대신 모든 사람이 병합 요청을 제출하도록 하려면:
    1. 병합 허용 대상관리자로 설정합니다.
    2. 푸시 및 병합 허용 대상아무도로 설정합니다.
    3. 강제 푸시 허용 대상을 비활성화합니다.
  6. GitLab Premium 및 GitLab Ultimate에서는 파일 작업에 대한 코드 소유자의 검토를 요구하려면 코드 소유자 승인 필요를 토글합니다.
  7. 보호를 선택합니다.
  8. 브랜치 표에서 규칙이 Default로 표시된 항목을 찾습니다. (GitLab의 버전에 따라 이 브랜치의 이름은 main 또는 master일 수 있습니다.) 이 브랜치에 대한 값을 1.* 규칙에 사용한 설정과 일치하도록 설정합니다.

이제 룰이 있더라도 아직 1.* 브랜치가 존재하지는 않지만, 이렇게 설정된 것입니다:

main 및 1.x가 이제 보호되었습니다

릴리스 브랜치 생성하기

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

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 Excelsior를 검색합니다. Excelsior라는 프로젝트를 선택합니다.
  2. 코드 > 브랜치를 선택합니다.
  3. 오른쪽 상단에서 새 브랜치를 선택합니다. 1.0.0으로 이름을 지정합니다.
  4. 브랜치 생성을 선택합니다.

이제 브랜치 보호가 UI에서 확인됩니다:

  • 왼쪽 사이드바에서 코드 > 브랜치를 선택합니다. 브랜치 목록에서 1.0.0 브랜치에 보호가 되어 있는 것을 확인할 수 있어야 합니다:

    브랜치 목록, 1.0.0이 보호되어 있는 것을 보여줍니다

  • 왼쪽 사이드바에서 설정 > 저장소를 선택한 다음 브랜치 규칙을 펼쳐서 보호된 모든 브랜치에 대한 세부 정보를 확인할 수 있습니다:

    보호된 브랜치 목록과 그 보호 설정

축하합니다! 여러분의 엔지니어들은 자신의 기능 브랜치에서 독립적으로 작업할 수 있으며, 1.0.0 릴리스 브랜치에 대한 고려를 위해 제출된 모든 코드는 전문가들에 의해 검토될 것입니다.