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

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

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

engineering 내의 하위 그룹 생성

engineering 그룹은 좋은 시작이지만 Excelsior 프로젝트의 백엔드 엔지니어, 프론트엔드 엔지니어 및 매니저들은 각자의 작업과 전문성이 다릅니다.

여기에서 engineering 그룹 내에서 더 세분화된 세 부그룹을 만들어 사용자를 그들의 작업 유형에 따라 분류할 것입니다: managers, frontend, backend. 그런 다음 이러한 새 그룹을 engineering 그룹의 멤버로 추가할 것입니다.

먼저 새로운 하위 그룹을 생성합니다:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 engineering을 검색합니다. Engineering 그룹을 선택합니다.
  2. engineering 그룹 개요 페이지에서 오른쪽 상단에 새로운 하위 그룹을 선택합니다.
  3. 하위 그룹 이름Managers를 입력합니다.
  4. 가시성 레벨비공개로 설정합니다.
  5. 하위 그룹 생성을 선택합니다.

그런 다음 하위 그룹을 engineering 그룹의 멤버로 추가합니다:

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

backendfrontend의 경우 동일한 작업을 반복합니다. 완료했을 때 engineering 그룹을 다시 검색하면 이러한 새로운 하위 그룹 세 개가 표시됩니다.

하위 그룹에 사용자 추가

이전 단계에서 하위 그룹을 상위 그룹(engineering)에 추가할 때 하위 그룹의 구성원을 유지 관리자 역할로 제한했습니다. 이것은 그들이 engineering이 소유한 프로젝트에서 상속할 수 있는 가장 높은 역할입니다. 따라서:

  • 사용자 1은 Manager 하위 그룹에 Guest 역할로 추가되며 engineering 프로젝트에서 Guest 역할을 받습니다.
  • 사용자 2는 Manager 그룹에 소유자 역할로 추가됩니다. 이 역할은 설정한 최대 역할인 유지 관리자보다 높으므로 사용자 2는 Owner가 아닌 Maintainer 역할을 받습니다.

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

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

이제 backendmanager 그룹에도 동일한 작업을 수행합니다. 동일한 사용자가 여러 하위 그룹의 구성원이 될 수 있습니다.

Excelsior 프로젝트 생성

이제 그룹 구조가 갖추어졌으므로 팀이 작업할 excelsior 프로젝트를 만들어야 합니다. 프론트엔드 및 백엔드 엔지니어가 모두 참여하기 때문에 excelsior는 새로 생성한 작은 하위 그룹 중 어느 것이 아닌 engineering 그룹에 속해야 합니다.

excelsior 프로젝트를 만드는 방법은 다음과 같습니다:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 engineering을 검색합니다. Engineering 그룹을 선택합니다.
  2. engineering 그룹 개요 페이지에서 왼쪽 사이드바 맨 위의 새로 만들기 () 및 이 그룹 내에서 > 새 프로젝트/저장소를 선택합니다.
  3. 비어 있는 프로젝트 만들기를 선택합니다.
  4. 프로젝트 세부 정보를 입력합니다:
    • 프로젝트 이름 필드에 Excelsior를 입력합니다. 프로젝트 슬러그excelsior로 자동으로 채워집니다.
    • 가시성 레벨에서 공개를 선택합니다.
    • README로 리포지토리 초기화를 선택하여 리포지토리에 초기 파일을 추가합니다.
  5. 프로젝트 만들기를 선택합니다.

GitLab은 excelsior 프로젝트를 생성하고 해당 홈페이지로 리디렉션합니다. 다음 단계에서 이 페이지의 기능을 사용할 것입니다.

기본 CODEOWNERS 파일 추가

프로젝트의 루트 디렉토리에 CODEOWNERS 파일을 추가하여 리뷰를 적절한 하위 그룹으로 보내세요. 다음은 네 가지 규칙을 설정하는 예시입니다:

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

::NOTE:: 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 파일 변경 사항을 매니저에 라우팅함
    - 모든 변경 사항을 리뷰해 달라고 요청함
    
  6. 변경 사항 커밋을 선택하세요.

이제 CODEOWNERS 파일이 main 브랜치에 위치하고 있으며 이후에 만들어지는 모든 브랜치에서 사용할 수 있습니다.

승인 규칙 구성

CODEOWNERS 파일은 디렉토리 및 파일 유형에 대한 적절한 리뷰어를 설명합니다. 승인 규칙은 병합 요청을 해당 리뷰어에게 보내도록 지시합니다. 여기에서는 새로운 CODEOWNERS 파일의 정보를 사용하고 릴리스 브랜치를 위해 보호 기능을 추가하는 승인 규칙을 설정합니다:

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

추가된 CODEOWNERS 적용 규칙은 이미지와 같습니다:

새로운 승인 규칙이 적용됨

브랜치에서 CODEOWNER 승인 적용

프로젝트에 대한 여러 보호 기능을 구성한 후 중요한 브랜치를 보호하기 위해 이러한 보호를 함께 결합할 준비가 되었습니다:

  • 사용자는 논리적인 그룹과 하위 그룹으로 분류됩니다.
  • CODEOWNERS 파일은 파일 유형 및 디렉토리에 대한 전문가를 설명합니다.
  • 승인 규칙에서 GitLab Free에서는 전문가가 변경 사항을 검토하도록 유도하고(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. 브랜치 테이블에서 기본이라고 표시된 규칙을 찾으세요. (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 릴리스 브랜치에 대한 모든 제출 코드는 전문가에 의해 검토될 것입니다.