Merge Request 의존성

Tier: Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated
  • 피처 플래그 remove_mr_blocking_constraints을 사용하여 GitLab 16.6에서 도입된 복잡한 Merge 의존성 지원. 기본적으로 비활성화됨.
  • 피처 플래그 remove_mr_blocking_constraints이 제거된 후, GitLab 16.7에서 복잡한 Merge 의존성이 일반적으로 사용 가능해짐.

한 가지 기능이 여러 Merge Request 및 여러 프로젝트에 걸쳐 있을 수 있으며, 작업이 Merge되는 순서가 중요한 경우 Merge Request 의존성을 사용합니다. 일부 예시:

  • 특정 프로젝트에 대한 변경 사항이 마이그레이션되기 전에 해당 라이브러리에 대한 변경 사항이 Merge되도록 보장합니다.
  • 기능 작업 그 자체가 Merge되기 전에 문서 전용 Merge Request이 Merge되는 것을 방지합니다.
  • 아직 권한이 부여되지 않은 사람의 작업이 Merge되기 전에 권한 행렬을 업데이트하는 Merge Request이 Merge되도록 요구합니다.

me/myexample 프로젝트가 myfriend/library에서 라이브러리를 가져온다면, myfriend/library에 새로운 기능을 사용하도록 프로젝트를 업데이트하고 싶을 수 있습니다. 그러나 외부 라이브러리가 새로운 기능을 추가하기 전에 프로젝트 변경 사항을 Merge하면 기본 브랜치를 손상시킬 수 있습니다. Merge Request 의존성은 작업이 너무 빨리 Merge되는 것을 방지합니다:

graph TB A['me/myexample' 프로젝트] B['myfriend/library' 프로젝트] C[Merge Request #1:<br>새 버전 2.5 생성] D[Merge Request #2:<br>빌드에 버전 2.5 추가] A-->|포함| D B---->|포함| C D-.->|종속| C C-.->|차단| D

me/myexample Merge Request을 임시(draft) 상태로 표시하고 코멘트에서 그 이유를 설명할 수 있습니다. 그러나 이 방법은 매뉴얼적이고 여러 프로젝트에서 여러 Merge Request에 의존하는 경우에는 규모가 확장되지 않습니다. 대신, 임시(또는 준비) 상태를 사용하여 개별 Merge Request의 준비 상태를 추적하고 Merge 순서를 강제합니다.

note
Merge Request 의존성은 PREMIUM 기능입니다. 그러나 이 제약은 종속 Merge Request에만 적용됩니다. PREMIUM 프로젝트에서의 Merge Request은 FREE 프로젝트의 Merge Request에 의존할 수 있지만, FREE 프로젝트의 Merge Request을 종속으로 표시할 수는 없습니다.

중첩된 의존성

GitLab 16.7 이상에서 간접적이고 중첩된 의존성이 지원됩니다. 단일 Merge Request은 최대 10개의 Merge Request에 의해 차단될 수 있으며, 마찬가지로 최대 10개의 Merge Request을 차단할 수 있습니다. 이 예시에서 myfriend/library!10herfriend/another-lib!1에 종속되어 있으며, 다시 이것은 mycorp/example!100에 종속되어 있습니다:

graph LR; A[myfriend/library!10]-->|종속| B[herfriend/another-lib!1] B-->|종속| C[mycorp/example!100]

중첩된 의존성은 GitLab UI에서 표시되지 않지만, UI 지원은 epic 5308에서 제안되었습니다.

note
Merge Request은 자체에 종속될 수는 없지만, 순환 의존성을 생성하는 것은 가능합니다.

Merge Request의 의존성 보기

Merge Request이 다른 Merge Request에 종속되어 있는 경우, Merge Request 보고서 섹션에 해당 의존성에 대한 정보가 표시됩니다:

Merge Request 위젯에서의 의존성

Merge Request의 의존성 정보를 보려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. Code > Merge Request을 선택하고 Merge Request을 식별합니다.
  3. Merge Request 보고서 영역으로 스크롤합니다. 종속 Merge Request은 (status-warning) Merge될 1개의 Merge Request에 의존과 같이 의존성에 대한 정보를 표시합니다.
  4. 각 의존성의 제목, 마일스톤, 담당자, 및 파이프라인 상태를 보려면 확장을 선택합니다.

Merge Request의 의존성이 모두 Merge되기 전에 Merge Request이 Merge될 수 없습니다. 메시지 Merge 차단: 위 항목들이 해결된 후에만 Merge할 수 있습니다가 표시됩니다.

종료된 Merge Request

종료된 Merge Request은 계획된 작업이 실제로 Merge되었는지 여부에 관계 없이 종료될 수 있다는 이유로 종속되어 있는 Merge Request이 Merge되는 것을 막습니다.

Merge Request이 종료되고 의존성이 더 이상 관련이 없으면, 종속 Merge Request의 차단을 해제하려면 해당 의존성을 제거합니다.

새로운 종속 Merge Request 생성

새로운 Merge Request을 만들 때, 다른 특정 작업이 Merge된 후에 Merge되지 않도록 막을 수 있습니다. 심사 기준:

  • 프로젝트에서 최소한개의 개발자 역할이 있거나 Merge Request을 만드는 권한이 있어야 합니다.
  • 종속 Merge Request은 Premium이나 Ultimate 티어의 프로젝트에 있어야 합니다.

새로운 Merge Request을 만들고 다른 Merge Request에 종속되게 하려면:

  1. 새로운 Merge Request을 만듭니다.
  2. Merge Request 의존성에, 해당 작업이 Merge되기 전에 Merge되어야 하는 Merge Request의 참조 또는 전체 URL을 붙입니다. 참조는 path/to/project!merge_request_id 형식입니다.
  3. Merge Request 만들기를 선택합니다.

Merge Request 편집하여 의존성 추가

기존의 Merge Request을 편집하고 다른 Merge Request에 종속시킬 수 있습니다. 심사 기준:

  • 프로젝트에서 최소한개의 개발자 역할이 있거나 Merge Request을 편집하는 권한이 있어야 합니다.

이를 수행하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. Code > Merge Request을 선택하고 Merge Request을 식별합니다.
  3. 편집을 선택합니다.
  4. Merge Request 의존성에, 해당 작업이 Merge되기 전에 Merge되어야 하는 Merge Request의 참조 또는 전체 URL을 붙입니다. 참조는 path/to/project!merge_request_id 형식입니다.

Merge Request에서 의존성 제거하기

의존성 있는 Merge Request을 편집하여 해당 의존성을 제거할 수 있습니다.

필수 조건:

  • Merge Request을 편집할 수 있는 프로젝트 내 권한이 필요합니다.
  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 코드 > Merge Request를 선택하고 Merge Request을 확인합니다.
  3. 편집을 선택합니다.
  4. Merge Request 의존성으로 스크롤하고 제거하려는 각 의존성의 참조 옆의 제거를 선택합니다.

    note
    액세스할 수 없는 Merge Request의 경우, 해당 Merge Request의 의존성은 1개의 접근할 수 없는 Merge Request으로 표시되며, 동일한 방식으로 제거할 수 있습니다.
  5. 변경 사항 저장을 선택합니다.

문제 해결

Merge Request 의존성 관리를 위한 API 지원

의존성을 관리하는 API 지원이 존재하지 않습니다. 자세한 정보는 이슈 #12551을 확인하세요.

프로젝트 가져오기 또는 내보내기 시 의존성 보존

프로젝트를 가져오거나 내보낼 때 의존성이 보존되지 않습니다. 자세한 정보는 이슈 #12549을 확인하세요.