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

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. 그룹 만들기를 선택합니다.
  3. 그룹 이름Engineering을 입력합니다.
  4. 그룹 URLengineering을 입력합니다.
  5. 가시성 레벨비공개로 설정합니다.
  6. GitLab이 가장 유용한 정보를 표시하도록 개인화된 경험을 설정합니다:
    • 역할에서 시스템 관리자를 선택합니다.
    • 이 그룹을 사용할 인물에서 내 회사 또는 팀을 선택합니다.
    • 이 그룹을 사용할 목적에서 내 코드를 저장하려고 합니다를 선택합니다.
  7. 그룹으로 초대장을 보내지 않습니다. 튜토리얼의 나중 단계에서 사용자를 추가할 것입니다.
  8. 그룹 만들기를 선택합니다.

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

engineering에서 하위 그룹 만들기

engineering 그룹은 좋은 시작이지만, Excelsior 프로젝트의 백엔드 엔지니어, 프론트엔드 엔지니어 및 관리자는 각각 다른 작업과 다른 전문 분야가 있습니다.

이곳에서 Engineering 그룹 내에서 백엔드 엔지니어, 프론트엔드 엔지니어 및 관리자를 사용자 유형에 따라 세분화된 세개의 하위 그룹을 만들고, 새로운 그룹을 engineering 그룹의 구성원으로 추가할 것입니다.

먼저, 새로운 하위 그룹을 만듭니다:

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

    검색 결과에서 engineering 그룹

  2. engineering 그룹의 개요 페이지에서 오른쪽 상단에 있는 새로운 하위 그룹을 선택합니다.
  3. 하위 그룹 이름Manager를 입력합니다.
  4. 가시성 레벨비공개로 설정합니다.
  5. 하위 그룹 만들기를 선택합니다.

다음으로, 이 하위 그룹을 engineering 그룹의 구성원으로 추가합니다:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 engineering을 검색하여 Engineering 그룹을 선택합니다.
  2. 관리 > 구성원을 선택합니다.
  3. 오른쪽 상단에 있는 그룹 초대를 선택합니다.
  4. 초대할 그룹 선택에서 Engineering / Managers를 선택합니다.
  5. 하위 그룹을 추가할 때 Maintainer 역할을 선택합니다. 이렇게 하면 하위 그룹의 구성원이 engineering 그룹과 해당 프로젝트에 액세스할 때 상속할 수 있는 가장 높은 역할이 구성됩니다.
  6. 선택 사항입니다. 만료 날짜를 선택합니다.
  7. 초대를 선택합니다.

이 프로세스를 backendfrontend에 대해 반복합니다. 마친 후, engineering 그룹을 한 번 더 검색하면 다음과 같이 개요 페이지에 세 개의 하위 그룹이 표시됩니다:

engineering 그룹에는 세 개의 하위 그룹이 있습니다

서브그룹에 사용자 추가하기

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

  • User 1은 manager 하위 그룹에 Guest 역할로 추가되어 engineering 프로젝트에서 Guest 역할을 받습니다.
  • User 2는 manager 그룹에 Owner 역할로 추가됩니다. 이 역할은 설정한 최대 역할인 Maintainer보다 높기 때문에 User 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 프로젝트를 생성하고 해당 홈페이지로 리디렉션합니다. 다음 단계에서 해당 페이지의 기능을 사용하게 될 것입니다.

Your new, almost-empty excelsior project

기본 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
       
    # 프론트엔드 파일은 FE 엔지니어에 의해 검토되어야 합니다
    [프론트엔드] @engineering/frontend
    *.scss
    *.js
       
    # 백엔드 파일은 BE 엔지니어에 의해 검토되어야 합니다
    [백엔드] @engineering/backend
    *.rb
    
  5. 커밋 메시지에 다음 내용을 붙여 넣습니다:

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

CODEOWNERS 파일은 이제 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. managers 그룹을 승인자로 추가합니다.
  9. 승인 규칙 추가를 선택합니다.
  10. 승인 설정으로 이동하여 Merge Request에서 승인 규칙 편집 방지가 선택되어 있는지 확인합니다.
  11. 변경 사항 저장을 선택합니다.

추가된 CODEOWNER 강제 실행 규칙은 다음과 같습니다:

새로운 승인 규칙이 적용됨

브랜치에서 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 허용아무도로 설정합니다.
    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 릴리스 브랜치에 대해 제출된 모든 코드는 전문가에 의해 검토될 것입니다.