머지 트레인
- GitLab 16.0 및 이후에서 Start merge train 및 Start merge train when pipeline succeeds 버튼은 Set to auto-merge가 되었습니다. Remove from merge train은 Cancel auto-merge가 되었습니다.
- 빠른 전진 및 반일선형 병합 방식을 지원하기 위해 GitLab 16.5에서
fast_forward_merge_trains_support
라는 플래그가 추가되었습니다. 기본적으로 활성화됩니다.- Feature flag
fast_forward_merge_trains_support
가 제거되었습니다 GitLab 16.11에서.
기본 브랜치에 빈번한 병합이 있는 프로젝트에서는 서로 다른 병합 요청의 변경 사항이 서로 충돌할 수 있습니다. 머지 트레인을 사용하여 병합 요청을 대기열에 넣습니다. 각 병합 요청은 이전 병합 요청과 비교되어 모두 함께 작동하는지 확인합니다.
추가 정보:
- 머지 트레인이 작동하는 방식은 머지 트레인 워크플로우를 참조하세요.
- 머지 트레인을 사용해야 하는 이유는 데브옵스의 효율성을 높이는 방법을 읽어보세요.
머지 트레인 워크플로우
병합 트레인은 대기 중인 병합 요청이 없고 Merge 또는 Set to auto-merge를 선택했을 때 시작됩니다. GitLab은 기본 브랜치로 병합할 수 있는지 확인하는 병합 트레인 파이프라인을 시작합니다. 첫 번째 파이프라인은 병합된 결과 파이프라인과 동일하며, 소스 및 대상 브랜치의 변경 사항이 함께 실행됩니다. 내부 병합 결과 커밋의 작성자는 병합을 시작한 사용자입니다.
첫 번째 파이프라인이 완료되면 바로 두 번째 병합 요청을 대기열에 넣어 바로 병합할 수 있도록 선택하고 싶다면 Merge or Set to auto-merge를 선택하여 트레인에 추가하세요. 두 번째 병합 트레인 파이프라인은 대상 브랜치와 함께 두 병합 요청의 변경 내용을 실행합니다. 마찬가지로 세 번째 병합 요청을 추가하면 해당 파이프라인은 세 개의 병합 요청의 변경 내용을 대상 브랜치와 함께 실행합니다. 파이프라인은 모두 병렬로 실행됩니다.
각 병합 요청은 다음을 거친 후에만 대상 브랜치로 병합됩니다:
- 병합 요청의 파이프라인이 성공적으로 완료됨.
- 그 전에 대기열에 들어온 모든 다른 병합 요청이 병합됨.
병합 트레인 파이프라인이 실패하면 병합 요청이 병합되지 않습니다. GitLab은 해당 병합 요청을 병합 트레인에서 제거하고, 해당 요청 이후에 대기열에 들어온 병합 요청에 대해 새로운 파이프라인을 시작합니다.
예를 들어:
세 개의 병합 요청(A
, B
, C
)이 순서대로 병합 트레인에 추가되어 병합되며 병렬로 실행되는 세 개의 병합 결과 파이프라인이 생성됩니다:
- 첫 번째 파이프라인은
A
의 변경 내용과 대상 브랜치의 변경 내용을 함께 실행합니다. - 두 번째 파이프라인은
A
와B
의 변경 내용과 대상 브랜치의 변경 내용을 함께 실행합니다. - 세 번째 파이프라인은
A
,B
,C
의 변경 내용과 대상 브랜치의 변경 내용을 함께 실행합니다.
B
의 파이프라인이 실패하면:
- 첫 번째 파이프라인(
A
)은 계속 실행됩니다. -
B
는 트레인에서 제거됩니다. -
C
의 파이프라인은 취소됩니다 그리고A
와C
의 변경 내용으로 대상 브랜치와 함께 새로운 파이프라인이 시작됩니다(B
변경 내용은 제외됨).
그러면 A
가 성공적으로 완료되면 대상 브랜치로 병합되고, C
는 계속 실행됩니다. 새로 추가된 병합 요청은 이제 대상 브랜치에 있는 A
의 변경 내용과 트레인의 C
변경 내용을 포함합니다.
병렬로 실행되는 머지 트레인이 기본 브랜치를 망가뜨리는 커밋을 방지하는 방법에 대한 데모를 시청하세요.
자동 파이프라인 취소
GitLab CI/CD는 중복 파이프라인을 감지하여 리소스를 보존합니다.
병합 트레인의 중복 파이프라인은 다음 경우에 발생합니다:
- 병합 트레인 중 하나의 병합 요청에 대한 파이프라인이 실패할 때.
- 병합 트레인을 건너뛰고 즉시 병합할 때(skip the merge train and merge immediately).
- 병합 트레인에서 병합 요청을 제거할 때(remove a merge request from a merge train).
이러한 경우에 GitLab은 일부 또는 모든 병합 요청에 대해 새로운 병합 트레인 파이프라인을 만들어야 합니다. 이전 파이프라인은 더 이상 유효하지 않은 이전 병합 트레인의 결합된 변경 사항을 비교했기 때문에 취소됩니다.
병합 트레인 활성화
disable_merge_trains
기능 플래그가 GitLab 16.5에서 제거되었습니다.
전제 조건:
- Maintainer 역할이 있어야 합니다.
- 외부 저장소가 아닌 GitLab 저장소여야 합니다(external repository가 아님).
- 병합 요청 파이프라인을 사용하도록 파이프라인을 구성해야 합니다. 그렇지 않으면 병합 요청이 미해결 상태에 있을 수 있습니다 또는 파이프라인이 삭제될 수 있습니다.
- 병합된 결과 파이프라인을 활성화해야 합니다.
병합 트레인을 활성화하려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 설정 > 병합 요청을 선택합니다.
- GitLab 16.4 및 이전에는 병합 방법 섹션에서 Merge commit이 선택되었는지 확인합니다. GitLab 16.5 및 이후에서는 어떤 병합 방법이든 사용할 수 있습니다.
- 병합 옵션 섹션에서 병합된 결과 파이프라인 활성화가 되어 있는지 확인하고 병합 트레인 활성화를 선택합니다.
- 변경 사항 저장을 선택합니다.
병합 기차 시작
전제 조건:
- 대상 브랜치에 병합하거나 푸시할 권한이 있어야 합니다.
병합 기차 시작 방법:
- 병합 요청으로 이동합니다.
- 선택합니다.
- 파이프라인이 실행되지 않을 때, 병합.
- 파이프라인이 실행 중일 때, 자동 병합으로 설정.
병합 요청의 병합 기차 상태는 파이프라인 위젯 아래에 표시되며
이와 유사한 메시지가 표시됩니다. 새로운 병합 기차가 시작되었으며, 이 병합 요청이 대기열의 첫 번째입니다. 병합 기차 세부 정보 보기.
이 메시지를 선택하여 병합 기차를 볼 수 있습니다.
다른 병합 요청을 이제 병합 기차에 추가할 수 있습니다.
병합 기차 보기
- 병합 기차 시각화는 GitLab 17.3에서 소개되었습니다.
병합 기차를 보고 대기열의 병합 요청의 순서와 상태에 대한 통찰력을 얻을 수 있습니다. 병합 기차 세부 정보 페이지에는 대기열의 활성 병합 요청과 기차의 일부였던 병합된 병합 요청이 표시됩니다.
병합 요청 목록에서 병합 기차 세부 정보에 액세스하는 방법:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 코드 > 병합 요청을 선택합니다.
- 병합 요청 목록 위에 병합 기차를 선택합니다.
- 선택 사항. 대상 브랜치로 병합 기차를 필터링합니다.
또한 병합된 병합 요청에 추가된 병합 기차에서 뷰 병합 기차 세부 정보를 선택하여 이 보기에 액세스할 수 있습니다.
병합 기차에 병합 요청 추가
전제 조건:
- 대상 브랜치에 병합하거나 푸시할 권한이 있어야 합니다.
병합 기차에 병합 요청을 추가하려면:
- 병합 요청으로 이동합니다.
- 선택합니다.
- 파이프라인이 실행되지 않을 때, 병합.
- 파이프라인이 실행 중일 때, 자동 병합으로 설정.
병합 요청의 병합 기차 상태는 파이프라인 위젯 아래에 표시되며
이와 유사한 메시지가 표시됩니다. 병합 요청이 대기열의 2/3입니다.
각 병합 기차는 동시에 최대 스무 개의 파이프라인을 실행할 수 있습니다. 병합 기차에 스무 개 이상의 병합 요청을 추가하면 추가적인 병합 요청은 대기열에 추가되어 파이프라인이 완료될 때까지 대기합니다. 병합 기차에 가입하기를 기다리는 병합 요청 수에는 제한이 없습니다.
병합 기차에서 병합 요청 제거
병합 기차에서 병합 요청을 제거할 때:
- 제거된 병합 요청 이후 대기열에 들어간 병합 요청의 모든 파이프라인이 다시 시작됩니다.
- 중복된 파이프라인은 취소됩니다.
나중에 병합 요청을 다시 병합 기차에 추가할 수 있습니다.
병합 요청을 병합 기차에서 제거하려면:
- 병합 요청에서 자동 병합 취소를 선택합니다.
- 병합 기차 세부 정보에서 병합 요청 옆에 를 선택합니다.
병합 기차 건너뛰고 즉시 병합
작업이 승인을 기다리는 긴급한 병합 요청(예: 긴급하게 병합해야 하는 중요한 패치)이 있는 경우 즉시 병합을 선택할 수 있습니다.
병합 요청을 즉시 병합하면:
- 병합 요청의 커밋은 병합 기차 상태를 무시합니다.
- 기차에 있는 다른 모든 병합 요청을 위한 병합 기차 파이프라인은 취소됩니다.
- 새로운 병합 기차가 시작되고 원래 병합 기차에 있는 모든 병합 요청이 새로운 병합 기차에 추가되며, 각각에 대한 새로운 병합 기차 파이프라인이 생성됩니다. 이제 이러한 새로운 병합 기차 파이프라인에는 즉시 병합된 병합 요청으로 추가된 커밋이 포함됩니다.
경고: 즉시 병합은 많은 CI/CD 리소스를 사용할 수 있습니다. 이 옵션은 비상 상황에서만 사용하세요.
참고: 프로젝트가 빠른-전진 병합 방법을 사용하고 소스 브랜치가 대상 브랜치보다 뒤에 있는 경우 즉시 병합 옵션이 사용할 수 없을 수 있습니다. 자세한 내용은 issue 434070을 참조하십시오.
병합 기차 파이프라인을 다시 시작하지 않고 즉시 병합으로 건너뛸 수 있도록 허용
상태: 실험
- GitLab 16.5에서
merge_trains_skip_train
이라는 이름의 플래그로 소개되었습니다. 기본적으로 비활성화됩니다.- GitLab 16.10에 실험 기능으로 활성화되었습니다.
플래그:
자체 관리형 GitLab의 경우, 기본적으로 이 기능을 사용할 수 있습니다. 플래그를 숨기려면 관리자가 링크
에서 merge_trains_skip_train
이라는 플래그를 비활성화할 수 있습니다. GitLab.com 및 전용 GitLab의 경우, 이 기능을 사용할 수 있습니다.
병합 요청을 빠르게 병합할 수 있도록 병합 기차를 건너뛸 수 있습니다. 예를 들어 작은 문서 업데이트와 같이 안전하게 파이프라인을 건너뛸 수 있는 변경 사항을 빨리 병합하는 데 사용할 수 있습니다.
빨리 병합하거나 줄기 진행은 병합 기차에서 빼뛰거나 반선 형 병합 방법에 사용할 수 없습니다. 자세한 내용은 issue 429009을 참조하십시오.
병합 기차를 건너뛰는 것은 실험적인 기능입니다. 나중의 릴리스에서 변경되거나 완전히 제거될 수 있습니다.
경고: 이 기능을 사용하여 보안 또는 버그 수정을 빠르게 병합하실 수 있지만, 기차를 건너뛴 병합 요청의 변경 사항은 기차의 다른 병합 요청 중 어떤 것이든 검증되지 않습니다. 이러한 다른 병합 기차 파이프라인은 성공적으로 완료되고 병합될 경우 결합된 변경 사항이 호환되지 않을 위험이 있습니다. 그러면 대상 브랜치를 해결하기 위해 추가 작업이 필요할 수 있습니다.
전제 조건:
- 관리자 역할이 있어야 합니다.
- 병합 기차를 활성화해야 합니다.
파이프라인을 다시 시작하지 않고 병합 기차를 건너뛰는 기능을 활성화하려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 설정 > 병합 요청을 선택합니다.
- 병합 옵션 섹션에서 병합 결과 파이프라인 활성화 및 병합 기차 활성화 옵션이 활성화되어 있는지 확인합니다.
- 병합 기차 건너뛰기 허용을 선택합니다.
- 변경 사항 저장을 선택합니다.
병합 기차를 건너뛰며 병합 요청을 병합하려면 병합 요청 병합 API 엔드포인트를 사용하여 속성 skip_merge_train
을 true
로 설정하여 병합하세요.
병합 요청이 병합되고 기존 병합 기차 파이프라인이 취소되거나 다시 시작되지 않습니다.
문제 해결
머지 트레인에서 머지 요청이 삭제됨
머지 트레인 파이프라인이 실행 중일 때 머지 요청이 병합할 수 없는 상태가 되면, 머지 트레인은 해당 머지 요청을 자동으로 삭제합니다. 예를 들어, 이는 다음과 같은 이유에 의해 발생할 수 있습니다:
- 머지 요청을 드래프트(draft)로 변경함.
- 머지 충돌.
- 모든 스레드가 해결될 때까지 머지 방지(prevent-merge-unless-all-threads-are-resolved)가 활성화된 새로운 대화 스레드.
머지 요청이 머지 트레인에서 삭제된 이유는 시스템 노트에 기록되어 있습니다. 개요 탭의 활동(Activity) 섹션에서 “사용자가 이 머지 요청을 머지 트레인에서 제거했습니다. 이유: …“와 비슷한 메시지를 확인할 수 있습니다.
자동 머지를 사용할 수 없음
머지 트레인이 활성화된 경우, 자동 머지(auto-merge)(이전에는 파이프라인 성공 시 병합(merge when pipeline succeeds)로 불림)를 사용하여 머지 트레인을 건너뛸 수 없습니다. 자세한 내용은 이슈 12267을 참조하세요.
머지 트레인 파이프라인을 다시 시도할 수 없음
머지 트레인 파이프라인이 실패하면 머지 요청이 트레인에서 삭제되어 파이프라인이 다시 시도되지 않습니다. 머지 트레인 파이프라인은 머지 요청의 변경 및 이미 트레인에 있는 다른 머지 요청의 변경이 병합된 결과물에서 실행됩니다. 따라서, 머지 요청이 트레인에서 삭제되면 병합된 결과물이 오래되어 파이프라인을 다시 시도할 수 없게 됩니다.
다음을 수행할 수 있습니다:
- 머지 요청을 다시 트레인에 추가하여 새로운 파이프라인을 트리거합니다.
- 임시적으로 실패한 경우 작업에
retry
키워드를 추가합니다. 재시도 후에 성공하면 머지 요청은 머지 트레인에서 제거되지 않습니다.
머지 트레인에 추가할 수 없음
파이프라인이 성공해야 함(Pipelines must succeed)이 활성화되어 있지만, 최신 파이프라인이 실패한 경우:
- 자동 머지 또는 머지 옵션이 사용할 수 없습니다.
- 머지 요청에
이 머지 요청의 파이프라인이 실패했습니다. 작업을 다시 시도하거나 새 커밋을 푸시하여 문제를 해결하세요.
라는 표시가 표시됩니다.
머지 요청을 다시 트레인에 추가하기 전에 다음을 시도할 수 있습니다:
- 실패한 작업을 다시 시도합니다. 성공하고 다른 작업이 실패하지 않았다면, 파이프라인은 성공으로 표시됩니다.
- 전체 파이프라인을 다시 실행합니다. 파이프라인 탭에서 파이프라인 실행을 선택합니다.
- 문제를 해결하는 새 커밋을 푸시합니다. 이로 인해 새로운 파이프라인이 트리거됩니다.
자세한 내용은 관련 이슈를 참조하세요.