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

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. 릴리스 브랜치 만들기

시작하기 전에

  • Maintainer 또는 Owner 역할이 있어야 합니다.
  • 관리자 및 이메일 주소 디렉터리이 필요합니다.
  • 백엔드 및 프론트엔드 엔지니어 및 이메일 주소 디렉터리이 필요합니다.
  • 브랜치 이름에 대한 의미론적 버전을 이해해야 합니다.

engineering 그룹 만들기

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

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

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

engineering 내에서 서브그룹 만들기

engineering 그룹은 좋은 시작점이지만 Excelsior Project의 백엔드 엔지니어, 프론트엔드 엔지니어, 그리고 관리자는 다른 작업과 전문성 영역을 가지고 있습니다.

이곳에서 Engineering 그룹 내에 더 세분화된 서브그룹 3개 (managers, frontend, backend)을 만들어서 사용자를 그들이 하는 작업 유형에 따라 분할할 것입니다. 그런 다음 이러한 새 그룹을 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 그룹을 한 번 더 검색하세요. 개요 페이지에는 다음과 같이 3개의 서브그룹이 표시되어야 합니다:

engineering 그룹에는 3개의 서브그룹이 있습니다

서브그룹에 사용자 추가

이전 단계에서 서브그룹을 부모 그룹(engineering)에 추가할 때, 해당 서브그룹의 회원을 Maintainer 역할로 제한했습니다. 이는 그들이 engineering이 소유한 프로젝트에서 상속할 수 있는 가장 높은 역할입니다. 따라서:

  • 사용자 1은 manager 서브그룹에 Guest 역할로 추가되어 engineering 프로젝트에서 Guest 역할을 받게 됩니다.
  • 사용자 2는 manager 그룹에 Owner 역할로 추가됩니다. 이 역할은 설정한 최대 역할(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 파일 자체에 대한 변경을 검토해야 합니다.
  • 프론트엔드 엔지니어는 프론트엔드 파일의 변경을, 백엔드 엔지니어들은 백엔드 파일의 변경을 검토해야 합니다.
note
GitLab Free는 선택적 검토만 지원합니다. 검토를 필수로 만들려면 GitLab Premium 또는 Ultimate가 필요합니다.

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

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

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

    새로운 CODEOWNERS 파일 추가
       
    - 백엔드 및 프론트엔드 변경을 올바른 팀으로 라우팅합니다
    - CODEOWNERS 파일 변경을 관리자에 라우팅합니다
    - 모든 변경을 요청하도록 설계됩니다
    
  6. 변경 사항 커밋을 선택합니다.

이제 CODEOWNERS 파일이 excelsior 프로젝트의 main 브랜치에 위치하고 이 프로젝트에서 생성되는 모든 미래 브랜치에서 사용할 수 있게 됩니다.

승인 규칙 구성

CODEOWNERS 파일은 디렉터리 및 파일 유형에 대한 적절한 리뷰어를 설명합니다. 승인 규칙은 해당 리뷰어에게 Merge Request을 직접 안내합니다. 여기서 새로운 CODEOWNERS 파일의 정보를 활용하여 릴리스 브랜치에 대한 보호 및 승인 규칙을 설정합니다:

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

추가된 CODEOWNERS 강제 적용 규칙은 다음과 같이 표시됩니다:

신규 승인 규칙 위치

브랜치에서 CODEOWNER 승인 강제 적용

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

  • 사용자는 논리적 그룹 및 하위 그룹으로 분류됩니다.
  • CODEOWNERS 파일은 파일 유형 및 디렉터리의 전문가를 설명합니다.
  • 승인 규칙을 통해 (GitLab Free에서는 권장, GitLab Premium 및 GitLab Ultimate에서는 필수) 해당 전문가들이 변경 사항을 검토하도록 장려합니다.

귀하의 excelsior 프로젝트는 릴리스 브랜치 이름에 대해 의미 있는 버전 관리를 사용하므로 릴리스 브랜치는 1.x1.x.x의 패턴을 따를 것으로 예상됩니다. 이러한 브랜치에 추가된 모든 코드를 전문가가 검토하도록 하고, 매니저가 릴리스 브랜치로 Merge할 작업을 최종적으로 결정하도록 합니다.

브랜치 단위로 보호를 만드는 대신 여러 브랜치를 보호하기 위해 와일드카드 브랜치 규칙을 구성합니다:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 Excelsior를 검색합니다. Excelsior 프로젝트를 선택합니다.
  2. 설정 > 리포지터리를 선택합니다.
  3. 보호된 브랜치를 확장합니다.
  4. 브랜치 드롭다운 디렉터리에서 1.*을 입력하고 와일드카드 1.* 만들기를 선택합니다.
  5. 커밋을 직접 푸시하는 대신 모든 사용자에게 Merge Request을 제출하도록 하려면:
    1. Merge 허용유지자(Maintainers)로 설정합니다.
    2. 푸시 및 Merge 허용아무도(No one)로 설정합니다.
    3. 강제 푸시 허용을 비활성화합니다.
  6. GitLab Premium 및 GitLab Ultimate에서 파일 변경에 대한 승인이 Code Owners에서 필요하도록 하려면 Code Owners의 승인 필요를 토글합니다.
  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 릴리스 브랜치를 고려하기 위해 제출된 모든 코드가 전문가에 의해 검토될 것입니다.