머지 트레인
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
기본 브랜치에 빈번하게 머지가 이루어지는 프로젝트에서는 서로 다른 머지 리퀘스트의 변경 사항이 서로 충돌할 수 있습니다. 머지 트레인은 대기 중인 머지 리퀘스트가 없을 때 머지 또는 자동 머지로 설정을 선택하면 시작됩니다.
히스토리
- GitLab 16.0 이상에서, 머지 트레인 시작 및 파이프라인이 성공하면 머지 트레인 시작 버튼이 자동 머지로 설정이 되었습니다. 머지 트레인에서 제거는 자동 머지 취소가 되었습니다.
- Fast-forward 및 semi-linear 머지 방법에 대한 지원이 GitLab 16.5에서
fast_forward_merge_trains_support라는 플래그와 함께 도입되었습니다. 기본적으로 활성화됩니다. - 피처 플래그
fast_forward_merge_trains_support제거가 GitLab 16.11에서 이루어졌습니다.
기본 브랜치에 빈번하게 머지가 이루어지는 프로젝트에서는 서로 다른 머지 리퀘스트의 변경 사항이 서로 충돌할 수 있습니다. 머지 리퀘스트를 큐에 넣으려면 머지 트레인을 사용합니다. 각 머지 리퀘스트는 다른 이전 머지 리퀘스트와 비교되어 모두 함께 작동하는지 확인합니다.
다음에 대한 자세한 정보:
- 머지 트레인의 작동 방식은 머지 트레인 워크플로우를 참조하세요.
- 머지 트레인을 사용하려는 이유는 머지 트레인 시작으로 DevOps 효율성을 향상시키는 방법을 읽어보세요.
머지 트레인 워크플로우#
머지 트레인은 대기 중인 머지 리퀘스트가 없을 때 머지 또는 자동 머지로 설정을 선택하면 시작됩니다. GitLab은 변경 사항이 기본 브랜치에 머지될 수 있는지 확인하는 머지 트레인 파이프라인을 시작합니다. 이 첫 번째 파이프라인은 소스 및 대상 브랜치의 변경 사항을 함께 결합하여 실행되는 머지된 결과 파이프라인과 동일합니다. 내부 머지 결과 커밋의 작성자는 머지를 시작한 사용자입니다.
첫 번째 파이프라인이 완료된 직후에 두 번째 머지 리퀘스트가 머지되도록 큐에 넣으려면, 머지 또는 자동 머지로 설정을 선택하여 트레인에 추가합니다. 이 두 번째 머지 트레인 파이프라인은 두 머지 리퀘스트의 변경 사항을 대상 브랜치와 결합하여 실행됩니다. 마찬가지로, 세 번째 머지 리퀘스트를 추가하면 해당 파이프라인이 세 머지 리퀘스트의 모든 변경 사항을 대상 브랜치와 머지하여 실행됩니다. 파이프라인은 모두 병렬로 실행됩니다.
각 머지 리퀘스트는 다음 조건이 모두 충족된 후에만 대상 브랜치에 머지됩니다:
- 머지 리퀘스트의 파이프라인이 성공적으로 완료됩니다.
- 이전에 큐에 대기된 다른 모든 머지 리퀘스트가 머지됩니다.
머지 트레인 파이프라인이 실패하면 머지 리퀘스트는 머지되지 않습니다. GitLab은 해당 머지 리퀘스트를 머지 트레인에서 제거하고 이후에 큐에 추가된 모든 머지 리퀘스트에 대해 새 파이프라인을 시작합니다.
예를 들어:
세 개의 머지 리퀘스트(A, B, C)가 순서대로 머지 트레인에 추가되어 병렬로 실행되는 세 개의 머지된 결과 파이프라인을 생성합니다:
- 첫 번째 파이프라인은
A의 변경 사항을 대상 브랜치와 결합하여 실행됩니다. - 두 번째 파이프라인은
A와B의 변경 사항을 대상 브랜치와 결합하여 실행됩니다. - 세 번째 파이프라인은
A,B,C의 변경 사항을 대상 브랜치와 결합하여 실행됩니다.
B에 대한 파이프라인이 실패하면:
- 첫 번째 파이프라인(
A)은 계속 실행됩니다. B는 트레인에서 제거됩니다.C에 대한 파이프라인은 자동으로 취소되고,A와C의 변경 사항(B변경 사항 없이)을 대상 브랜치와 결합한 새 파이프라인이 시작됩니다.
A가 성공적으로 완료되면 대상 브랜치에 머지되고 C는 계속 실행됩니다. 트레인에 추가된 새 머지 리퀘스트에는 이제 대상 브랜치의 A 변경 사항과 머지 트레인의 C 변경 사항이 포함됩니다.
머지 트레인의 병렬 실행이 어떻게 커밋이 기본 브랜치를 깨지는 것을 방지하는지에 대한 시연 비디오를 시청하세요.
자동 파이프라인 취소#
GitLab CI/CD는 중복 파이프라인을 감지하고 리소스를 절약하기 위해 취소합니다.
중복 머지 트레인 파이프라인은 다음과 같은 경우에 발생합니다:
- 머지 트레인의 머지 리퀘스트 중 하나에서 파이프라인이 실패합니다.
- 머지 트레인을 건너뛰고 즉시 머지합니다.
- 머지 트레인에서 머지 리퀘스트를 제거합니다.
이러한 경우 GitLab은 트레인의 일부 또는 모든 머지 리퀘스트에 대해 새 머지 트레인 파이프라인을 생성해야 합니다. 이전 파이프라인은 더 이상 유효하지 않은 이전 결합된 변경 사항과 비교하고 있었으므로 취소됩니다.
머지 트레인 활성화#
히스토리
disable_merge_trains피처 플래그가 GitLab 16.5에서 제거되었습니다.
사전 요구사항:
- Maintainer 권한이 있어야 합니다.
- 리포지터리는 GitLab 리포지터리여야 하며, 외부 리포지터리는 안 됩니다.
- 파이프라인은 머지 리퀘스트 파이프라인을 사용하도록 구성되어야 합니다. 그렇지 않으면 머지 리퀘스트가 해결되지 않은 상태에 멈추거나 파이프라인이 삭제될 수 있습니다.
- 머지된 결과 파이프라인이 활성화되어 있어야 합니다.
머지 트레인을 활성화하려면:
- 상단 바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 설정 > 머지 리퀘스트를 선택합니다.
- GitLab 16.4 이전에는 머지 방법 섹션에서 머지 커밋이 선택되어 있는지 확인합니다. GitLab 16.5 이상에서는 모든 머지 방법을 사용할 수 있습니다.
- 머지 옵션 섹션에서 머지된 결과 파이프라인 활성화가 활성화되어 있는지 확인하고 머지 트레인 활성화를 선택합니다.
- 변경 사항 저장을 선택합니다.
머지 트레인 시작#
사전 요구사항:
- 대상 브랜치에 머지하거나 푸시할 권한이 있어야 합니다.
머지 트레인을 시작하려면:
- 머지 리퀘스트로 이동합니다.
- 다음을 선택합니다:
- 파이프라인이 실행되지 않는 경우, 머지.
- 파이프라인이 실행 중인 경우, 자동 머지로 설정.
머지 리퀘스트의 머지 트레인 상태는 파이프라인 위젯 아래에 새 머지 트레인이 시작되었으며 이 머지 리퀘스트가 큐의 첫 번째입니다. 머지 트레인 세부 정보 보기와 유사한 메시지와 함께 표시됩니다. 링크를 선택하여 머지 트레인을 볼 수 있습니다.
이제 다른 머지 리퀘스트를 트레인에 추가할 수 있습니다.
머지 트레인 보기#
히스토리
- 머지 트레인 시각화가 GitLab 17.3에서 도입되었습니다.
머지 트레인을 보면 큐에 있는 머지 리퀘스트의 순서와 상태에 대한 더 나은 통찰력을 얻을 수 있습니다. 머지 트레인 세부 정보 페이지는 큐에 있는 활성 머지 리퀘스트와 트레인의 일부였던 머지된 머지 리퀘스트를 보여줍니다.
머지 리퀘스트 목록에서 머지 트레인 세부 정보에 액세스하려면:
- 상단 바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 왼쪽 사이드바에서 코드 > 머지 리퀘스트를 선택합니다.
- 머지 리퀘스트 목록 위에서 머지 트레인을 선택합니다.
- 선택 사항. 대상 브랜치별로 머지 트레인을 필터링합니다.
다음에서 머지 트레인 세부 정보 보기를 선택하여 이 보기에 액세스할 수도 있습니다:
- 머지 트레인에 추가된 머지 리퀘스트의 파이프라인 위젯 및 시스템 노트.
- 머지 트레인 파이프라인의 파이프라인 세부 정보 페이지.
머지 트레인 세부 정보 보기에서 머지 리퀘스트를 제거 (✗)할 수도 있습니다.
머지 트레인에 머지 리퀘스트 추가#
히스토리
- 머지 트레인용 자동 머지가 GitLab 17.2에서
merge_when_checks_pass_merge_train이라는 플래그와 함께 도입되었습니다. 기본적으로 비활성화됩니다. - 머지 트레인용 자동 머지가 GitLab 17.2에서 GitLab.com에서 활성화되었습니다.
- 머지 트레인용 자동 머지가 GitLab 17.4에서 기본적으로 활성화되었습니다.
- 머지 트레인용 자동 머지가 GitLab 17.7에서 일반적으로 사용 가능하게 되었습니다. 피처 플래그
merge_when_checks_pass_merge_train이 제거되었습니다.
사전 요구사항:
- 대상 브랜치에 머지하거나 푸시할 권한이 있어야 합니다.
머지 트레인에 머지 리퀘스트를 추가하려면:
- 머지 리퀘스트를 방문합니다.
- 다음을 선택합니다:
- 파이프라인이 실행되지 않는 경우, 머지.
- 파이프라인이 실행 중인 경우, 자동 머지로 설정.
머지 리퀘스트의 머지 트레인 상태는 파이프라인 위젯 아래에 이 머지 리퀘스트는 큐의 3개 중 2번째입니다와 유사한 메시지와 함께 표시됩니다.
각 머지 트레인은 최대 20개의 파이프라인을 병렬로 실행할 수 있습니다. 머지 트레인에 20개 이상의 머지 리퀘스트를 추가하면, 추가 머지 리퀘스트는 파이프라인이 완료될 때까지 대기하며 큐에 들어갑니다. 머지 트레인에 합류하기를 기다리는 큐에 대기 중인 머지 리퀘스트 수에는 제한이 없습니다.
머지 트레인에서 머지 리퀘스트 제거#
머지 트레인에서 머지 리퀘스트를 제거하면:
- 제거된 머지 리퀘스트 이후에 큐에 추가된 모든 머지 리퀘스트에 대한 파이프라인이 재시작됩니다.
- 중복 파이프라인은 취소됩니다.
나중에 머지 리퀘스트를 머지 트레인에 다시 추가할 수 있습니다.
머지 트레인에서 머지 리퀘스트를 제거하려면:
- 머지 리퀘스트에서 자동 머지 취소를 선택합니다.
- 머지 트레인 세부 정보에서 머지 리퀘스트 옆에 있는 ✗를 선택합니다.
머지 트레인을 건너뛰고 즉시 머지#
긴급하게 머지해야 하는 중요한 패치와 같이 우선순위가 높은 머지 리퀘스트가 있는 경우 즉시 머지를 선택할 수 있습니다.
즉시 머지는 많은 CI/CD 리소스를 사용할 수 있습니다. 중요한 상황에서만 이 옵션을 사용하세요.
머지 리퀘스트를 즉시 머지하면:
- 머지 트레인의 상태를 무시하고 머지 리퀘스트의 커밋이 머지됩니다.
- 트레인의 다른 모든 머지 리퀘스트에 대한 머지 트레인 파이프라인은 취소됩니다.
- 새 머지 트레인이 시작되고 원래 머지 트레인의 모든 머지 리퀘스트가 이 새 머지 트레인에 추가되며, 각각에 대한 새 머지 트레인 파이프라인이 생성됩니다. 이러한 새 머지 트레인 파이프라인에는 즉시 머지된 머지 리퀘스트에 의해 추가된 커밋이 이제 포함됩니다.
프로젝트가 fast-forward 머지 방법을 사용하고 소스 브랜치가 대상 브랜치보다 뒤처져 있는 경우 즉시 머지 옵션이 사용 불가능할 수 있습니다. 자세한 내용은 이슈 434070을 참조하세요.
머지 트레인 파이프라인을 재시작하지 않고 즉시 머지하기 위해 머지 트레인 건너뛰기 허용#
히스토리
GitLab Self-Managed에서 이 기능은 기본적으로 사용 가능합니다. 이 기능을 숨기려면 관리자가 merge_trains_skip_train이라는 피처 플래그를 비활성화할 수 있습니다. GitLab.com 및 GitLab Dedicated에서 이 기능을 사용할 수 있습니다.
실행 중인 머지 트레인을 완전히 재시작하지 않고 머지 리퀘스트가 머지될 수 있도록 허용할 수 있습니다. 이 기능을 사용하여 사소한 문서 업데이트와 같이 파이프라인을 안전하게 건너뛸 수 있는 변경 사항을 빠르게 머지합니다.
fast-forward 또는 semi-linear 머지 방법에 대해서는 머지 트레인을 건너뛸 수 없습니다. 자세한 내용은 이슈 429009를 참조하세요.
머지 트레인 건너뛰기는 실험적 기능입니다. 향후 릴리스에서 변경되거나 완전히 제거될 수 있습니다.
이 기능을 사용하여 보안 또는 버그 수정을 빠르게 머지할 수 있지만, 트레인을 건너뛴 머지 리퀘스트의 변경 사항은 트레인의 다른 머지 리퀘스트와 검증되지 않습니다. 이러한 다른 머지 트레인 파이프라인이 성공적으로 완료되어 머지되면, 결합된 변경 사항이 호환되지 않을 위험이 있습니다. 그러면 대상 브랜치에서 새 실패를 해결하기 위한 추가 작업이 필요할 수 있습니다.
사전 요구사항:
- Maintainer 권한이 있어야 합니다.
- 머지 트레인이 활성화되어 있어야 합니다.
파이프라인 재시작 없이 트레인 건너뛰기를 활성화하려면:
- 상단 바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 설정 > 머지 리퀘스트를 선택합니다.
- 머지 옵션 섹션에서 머지된 결과 파이프라인 활성화 및 머지 트레인 활성화 옵션이 활성화되어 있는지 확인합니다.
- 머지 트레인 건너뛰기 허용을 선택합니다.
- 변경 사항 저장을 선택합니다.
머지 트레인을 건너뛰어 머지 리퀘스트를 머지하려면 skip_merge_train 속성을 true로 설정하여 머지 리퀘스트 머지 API 엔드포인트를 사용합니다.
머지 리퀘스트가 머지되고 기존 머지 트레인 파이프라인은 취소되거나 재시작되지 않습니다.
트러블슈팅#
머지 트레인에서 머지 리퀘스트 제거#
머지 트레인 파이프라인이 실행 중에 머지 리퀘스트를 머지할 수 없게 되면, 머지 트레인이 자동으로 해당 머지 리퀘스트를 제거합니다. 일반적인 원인은 다음과 같습니다:
- 머지 리퀘스트를 드래프트로 변경합니다.
- 머지 충돌.
- 모든 스레드가 해결되어야 합니다가 활성화된 경우 해결되지 않은 새 대화 스레드.
머지 리퀘스트가 머지 트레인에서 제거된 이유는 시스템 노트에서 찾을 수 있습니다. 개요 탭의 활동 섹션에서 다음과 유사한 메시지를 확인합니다: User removed this merge request from the merge train because ...
자동 머지를 사용할 수 없음#
머지 트레인이 활성화된 경우 자동 머지(이전에는 파이프라인이 성공하면 머지)를 사용하여 머지 트레인을 건너뛸 수 없습니다. 자세한 내용은 이슈 12267을 참조하세요.
머지 트레인 파이프라인을 재시도할 수 없음#
머지 트레인 파이프라인이 실패하면 머지 리퀘스트가 트레인에서 제거되고 실패 후 파이프라인을 재시도할 수 없습니다. 머지 트레인 파이프라인은 머지 리퀘스트의 변경 사항과 이미 트레인에 있는 다른 머지 리퀘스트의 변경 사항의 머지된 결과에서 실행됩니다. 머지 리퀘스트가 트레인에서 제거되면 머지된 결과가 최신이 아니므로 파이프라인을 재시도할 수 없습니다.
다음을 할 수 있습니다:
- 새 파이프라인을 트리거하는 머지 리퀘스트를 트레인에 다시 추가합니다.
- 일시적으로 실패하는 경우 잡에
retry키워드를 추가합니다. 재시도 후 성공하면 머지 리퀘스트가 머지 트레인에서 제거되지 않습니다.
머지 트레인에 머지 리퀘스트를 추가할 수 없음#
파이프라인이 성공해야 합니다가 활성화되어 있지만 최신 파이프라인이 실패한 경우:
- 자동 머지로 설정 또는 머지 옵션을 사용할 수 없습니다.
- 머지 리퀘스트에
이 머지 리퀘스트에 대한 파이프라인이 실패했습니다. 잡을 재시도하거나 실패를 수정하는 새 커밋을 푸시하세요.가 표시됩니다.
머지 리퀘스트를 머지 트레인에 다시 추가하기 전에 다음을 시도할 수 있습니다:
- 실패한 잡을 재시도합니다. 통과하고 다른 잡이 실패하지 않으면 파이프라인이 성공으로 표시됩니다.
- 전체 파이프라인을 다시 실행합니다. 파이프라인 탭에서 파이프라인 실행을 선택합니다.
- 문제를 수정하는 새 커밋을 푸시합니다. 이는 새 파이프라인도 트리거합니다.
자세한 내용은 관련 이슈를 참조하세요.
