Merge 기차

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

기본 브랜치에 빈번한 Merge을 하는 프로젝트에서 다른 Merge Request에 대한 변경 사항이 서로 충돌할 수 있습니다. Merge 기차를 사용하여 Merge Request을 대기열에 넣습니다. 각 Merge Request은 다른 이전 Merge Request과 비교되어 함께 작동하는지 확인합니다.

자세한 정보는 다음을 참조하십시오:

Merge 기차 워크플로우

Merge 기차는 대기 중인 Merge Request이 없을 때 Merge를 선택하면 시작됩니다. GitLab은 기본 브랜치로 Merge될 수 있는지를 확인하는 Merge 기차 파이프라인을 시작합니다. 이 첫 번째 파이프라인은 Merge된 결과 파이프라인과 동일하며, 소스 및 대상 브랜치의 변경 사항이 결합된 것에 대해 실행됩니다. 내부 Merge된 결과 커밋의 저자는 Merge을 시작한 사용자입니다.

첫 번째 파이프라인이 완료된 후 바로 두 번째 Merge Request을 대기열에 넣으려면 Set to auto-merge를 선택하여 이를 추가합니다. 두 번째 Merge 기차 파이프라인은 대상 브랜치와 결합된 모든 Merge Request에 대한 변경 사항에 대해 실행됩니다. 마찬가지로 세 번째 Merge Request을 추가하면 해당 파이프라인은 대상 브랜치와 Merge된 모든 세 개의 Merge Request에 대한 변경 사항에 대해 실행됩니다. 모든 파이프라인은 병렬로 실행됩니다.

각 Merge Request은 다음 조건이 모두 충족될 때에만 대상 브랜치로 Merge됩니다:

  • Merge Request의 파이프라인이 성공적으로 완료됨.
  • 그 앞에 대기한 다른 Merge Request들이 모두 Merge됨.

Merge 기차 파이프라인이 실패하면 해당 Merge Request은 Merge되지 않습니다. GitLab은 해당 Merge Request을 Merge 기차에서 제거하고, 해당 Merge Request 이후에 대기열에 있는 모든 Merge Request에 대해 새로운 파이프라인을 시작합니다.

예를 들어:

세 개의 Merge Request(A, B, 그리고 C)이 차례대로Merge 기차에 추가되어 세 개의 Merge된 결과 파이프라인이 병렬로 실행됩니다:

  1. 첫 번째 파이프라인은 A의 변경 사항과 대상 브랜치에서 실행됩니다.
  2. 두 번째 파이프라인은 AB의 변경 사항과 대상 브랜치에서 실행됩니다.
  3. 세 번째 파이프라인은 A, B, 및 C의 변경 사항과 대상 브랜치에서 실행됩니다.

만약 B의 파이프라인이 실패하면:

  • 첫 번째 파이프라인 (A)은 계속해서 실행됩니다.
  • B는 기차에서 제거됩니다.
  • C의 파이프라인은 취소됩니다 그리고 AC의 변경 사항만 대상 브랜치와 결합하여 새로운 파이프라인이 시작됩니다 (B의 변경 사항은 제외됩니다).

그 후에 A가 성공적으로 완료되면 대상 브랜치로 Merge되고 C는 계속 실행됩니다. 기차에 추가된 새로운 Merge Request은 이제 대상 브랜치에 있는 A의 변경 사항과 Merge 기차의 C 변경 사항을 포함하게 됩니다.

Merge 기차의 병렬 실행이 기본 브랜치를 깨지는 커밋으로부터 보호하는 동영상을 시청하세요.

자동 파이프라인 취소

GitLab CI/CD는 중복되는 파이프라인을 감지하고 리소스를 보존하기 위해 이를 취소합니다.

중복된 Merge 기차 파이프라인은 다음과 같은 경우에 발생합니다:

이러한 경우에 GitLab은 기존 Merge 기차의 일부 또는 모든 Merge Request에 대한 새로운 Merge 기차 파이프라인을 생성해야 합니다. 이전 파이프라인들은 더는 유효하지 않은 이전 Merge 기차의 결합된 변경 사항을 비교했기 때문에 이러한 이전 파이프라인들은 취소됩니다.

Merge 기차 활성화

선행 조건:

Merge 기차를 활성화하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. Settings > Merge requests를 선택합니다.
  3. GitLab 16.4 이전에, Merge method 섹션에서 Merge commit가 선택되어 있는지 확인하십시오. GitLab 16.5 이후에는 어떤 Merge 방법이든 사용할 수 있습니다.
  4. Merge options 섹션에서 Enable merged results pipelines가 활성화되어 있는지 확인하고 Enable merge trains를 선택합니다.
  5. 변경 사항 저장을 선택합니다.

Merge 기차 시작

선행 조건:

  • 대상 브랜치에 Merge하거나 푸시할 권한이 있어야 합니다.

Merge 기차를 시작하려면:

  1. Merge Request을 방문합니다.
  2. 다음 중 하나를 선택합니다:
    • 파이프라인이 실행되지 않은 경우, Merge을 선택합니다.
    • 파이프라인이 실행 중인 경우, Set to auto-merge를 선택합니다.

Merge Request의 Merge 기차 상태는 파이프라인 위젯 아래에 표시되며, 메시지가 표시됩니다. 예를 들어 새로운 Merge 기차가 시작되었으며이 Merge Request은 대기열의 첫 번째입니다.

다른 Merge Request이 이제 기차에 추가될 수 있습니다.

Merge Request을 Merge 기차에 추가

선행 조건:

  • 대상 브랜치에 Merge하거나 푸시할 권한이 있어야 합니다.

Merge Request을 Merge 기차에 추가하려면:

  1. Merge Request을 방문합니다.
  2. 다음 중 하나를 선택합니다:
    • 파이프라인이 실행되지 않은 경우, Merge을 선택합니다.
    • 파이프라인이 실행 중인 경우, Set to auto-merge를 선택합니다.

Merge Request의 Merge 기차 상태는 파이프라인 위젯 아래에 표시되며, 메시지가 표시됩니다. 예를 들어 Merge 기차에 추가되었습니다. 대기 중인 Merge Request이 2개 있습니다.

각 Merge 기차는 최대 스무 개의 파이프라인을 병렬로 실행할 수 있습니다. 만약 스무 개 이상의 Merge Request을 Merge 기차에 추가하면 나머지 Merge Request들은 대기 중이며 파이프라인이 완료될 때까지 기다립니다. Merge 기차에 추가될 대기 중인 Merge Request 수에는 제한이 없습니다.

Merge 편성에서 Merge Request 제거

Merge 편성에서 Merge Request을 제거하려면 자동 Merge 취소를 선택합니다. 나중에 Merge Request을 다시 Merge 편성에 추가할 수 있습니다.

Merge Request을 Merge 편성에서 제거하면:

  • 제거된 Merge Request 이후 대기 중인 Merge Request에 대한 모든 파이프라인이 다시 시작됩니다.
  • 제거된 Merge Request 이후의 중복 파이프라인은 취소됩니다.

Merge 편성 건너뛰고 즉시 Merge

긴급하게 Merge해야 하는 중요 Merge Request(예: 즉시 Merge해야 하는 중요 패치)이 있는 경우 즉시 Merge을 선택할 수 있습니다.

Merge Request을 즉시 Merge하면:

  • Merge Request의 커밋이 Merge 편성의 상태를 무시하고 Merge됩니다.
  • Merge 편성에서 기존 Merge Request에 대한 모든 Merge 편성 파이프라인이 취소됩니다.
  • 새로운 Merge 편성이 시작되고 원본 Merge 편성에 있는 모든 Merge Request이 이 새로운 Merge 편성에 추가되어 각각에 새로운 Merge 편성 파이프라인이 생깁니다. 이제 이러한 새로운 Merge 편성 파이프라인에는 즉시 Merge된 Merge Request에 의해 추가된 커밋이 포함됩니다.
caution
즉시 Merge은 많은 CI/CD 리소스를 사용할 수 있습니다. 이 옵션은 중요한 상황에서만 사용하세요.
note
프로젝트에서 빠른-순방향 Merge 방법을 사용하고 소스 브랜치가 대상 브랜치보다 뒤쳐진 경우 즉시 Merge 옵션이 사용할 수 없을 수 있습니다. 자세한 내용은 issue 434070을 참조하세요.

Merge 편성 건너뛰고 즉시 Merge하여 Merge 편성 파이프라인 다시 시작하지 않기

Status: 실험

플래그: 자체 호스팅하는 GitLab의 경우 이 기능은 기본적으로 사용할 수 있습니다. 특성을 숨기려면 관리자가 merge_trains_skip_train이란 이름의 플래그를 비활성화할 수 있습니다. GitLab.com 및 전용 GitLab의 경우 이 기능을 사용할 수 있습니다.

Merge 편성을 완전히 다시 시작하지 않고 Merge Request을 빠르게 Merge할 수 있도록 이 기능을 사용하세요. 예를 들어 작은 문서 업데이트와 같이 파이프라인을 건너뛰도록 안전하게 변경 사항을 빠르게 Merge할 수 있습니다.

빠른-순방향이나 반-선형 Merge 방법에 대해 Merge 편성을 건너뛸 수 없습니다. 자세한 내용은 issue 429009을 참조하세요.

Merge 편성 건너뛰기는 실험적인 기능입니다. 향후 릴리스에서 변경되거나 완전히 제거될 수 있습니다.

caution
이 기능을 사용하여 보안 또는 버그 수정을 빠르게 Merge할 수 있지만, Merge 편성을 건너뛴 Merge Request의 변경 사항은 Merge 편성의 다른 모든 Merge Request에 대해 확인되지 않습니다. 이러한 다른 Merge 편성 파이프라인이 성공적으로 Merge된 경우, Merge된 변경 사항이 호환되지 않을 위험이 있습니다. 그러면 대상 브랜치를 해결하기 위해 추가 작업이 필요할 수 있습니다.

도구:

파이프라인을 다시 시작하지 않고 편성을 건너뛸 수 있도록 설정하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하여 프로젝트를 찾습니다.
  2. 설정 > Merge Request을 선택합니다.
  3. Merge 옵션 섹션에서 Merge Result 파이프라인 활성화Merge 편성 활성화 옵션이 활성화되어 있는지 확인합니다.
  4. Merge 편성 건너뛰기를 선택합니다.
  5. 변경 사항 저장을 선택합니다.

Merge 편성 건너뛰기를 통해 Merge 편성을 건너뛴 Merge Request으로 Merge하려면 Merge Request Merge API 엔드포인트를 사용하여 skip_merge_train 속성을 true로 설정합니다.

Merge Request이 Merge되며 기존 Merge 편성 파이프라인은 취소되거나 다시 시작되지 않습니다.

문제 해결

Merge 편성에서 제거된 Merge Request

Merge 편성 파이프라인이 실행 중일 때 Merge Request이 Merge할 수 없는 상태가 되면 Merge 편성이 자동으로 해당 Merge Request을 삭제합니다. 예를 들어 다음과 같은 경우에 해당됩니다.

Merge Request이 Merge 편성에서 제거된 이유는 시스템 노트에서 확인할 수 있습니다. 개요 탭의 활동 섹션에서 다음과 유사한 메시지를 확인하세요: 사용자가 ... 때문에 이 Merge Request을 Merge 편성에서 제거했습니다.

자동 Merge 사용 불가

Merge 편성이 활성화되어 있을 때 자동 Merge(이전 파이프라인 성공 시 Merge)을 사용하여 Merge 편성을 건너뛸 수 없습니다. 자세한 내용은 issue 12267을 참조하세요.

Merge 편성 파이프라인 다시 시도 불가

Merge 편성 파이프라인이 실패한 경우 Merge Request이 편성에서 제거되며 해당 파이프라인을 다시 시도할 수 없습니다. Merge 편성 파이프라인은 이미 편성된 Merge Request의 변경 사항과 다른 Merge Request의 변경 사항의 Merge Result를 실행합니다. 따라서 Merge Request이 편성에서 제거되면 Merge Result가 오래되어 다시 시도할 수 없습니다.

다음을 수행할 수 있습니다:

  • Merge Request을 다시 편성에 추가하여 새로운 파이프라인을 트리거합니다.
  • 작업이 가끔 실패하는 경우 작업에 retry 키워드를 추가할 수 있습니다. 재시도 후 성공하면 Merge Request이 편성에서 제거되지 않습니다.

Merge 편성에 추가할 수 없음

파이프라인 성공해야 함이 활성화되어 있지만 최신 파이프라인이 실패한 경우:

  • 자동 Merge 설정 또는 Merge 옵션이 사용할 수 없습니다.
  • Merge Request에 이 Merge Request의 파이프라인이 실패했습니다. 작업을 다시 시도하거나 실패를 해결하려면 새로운 커밋을 푸시하세요.가 표시됩니다.

Merge Request을 다시 Merge 편성에 추가하기 전에 다음을 시도할 수 있습니다:

  • 실패한 작업을 다시 시도합니다. 성공하고 다른 작업이 실패하지 않으면 파이프라인이 성공으로 표시됩니다.
  • 전체 파이프라인을 다시 실행합니다. 파이프라인 탭에서 파이프라인 실행을 선택합니다.
  • 문제를 해결하는 새로운 커밋을 푸시합니다. 이렇게 하면 새로운 파이프라인이 트리거됩니다.

자세한 내용은 관련된 이슈를 참조하세요.