- Merge 기차 워크플로우
- Merge 기차 활성화
- Merge 기차 시작
- Merge Request을 Merge Train에 추가
- Merge Train에서 Merge Request 제거
- Merge Train 건너뛰고 즉시 Merge
- 문제 해결
Merge 기차
- GitLab 16.0 및 이후에서 Merge 기차 시작 및 Merge 기차 시작 시 파이프라인이 성공하면 버튼은 자동 Merge으로 설정이 되었습니다. Merge 기차에서 제거는 자동 Merge 취소로 변경되었습니다.
- 빠른 순방향 및 세미-선형 Merge 방식을 지원하는 기능이 GitLab 16.5에 도입되었습니다. 기본적으로
fast_forward_merge_trains_support
이라는 플래그가 있습니다.
기본 브랜치에 빈번한 Merge이 있는 프로젝트에서 서로 다른 Merge Request의 변경 내용이 충돌할 수 있습니다. Merge 기차를 사용하여 Merge Request을 대기열에 넣을 수 있습니다. 각 Merge Request은 다른 이전 Merge Request과 비교되어 모두 함께 작동하는지 확인됩니다.
자세한 정보는 다음에서 확인할 수 있습니다:
- Merge 기차 작동 방식은 Merge 기차 워크플로우를 참조하십시오.
- Merge 기차를 사용하는 이유는 Merge 기차가 DevOps의 효율성을 향상시키는 방법를 읽어보세요.
Merge 기차 워크플로우
Merge 기차는 Merge을 대기하는 Merge Request이 없을 때 시작되고 Merge을 선택하면 시작됩니다. GitLab은 기본 브랜치에 변경 내용을 Merge할 수 있는 Merge 기차 파이프라인을 시작합니다. 이 첫 번째 파이프라인은 Merge된 결과 파이프라인과 동일하며, 소스와 대상 브랜치의 변경 내용을 함께 실행합니다. 내부 Merge Result 커밋의 저자는 Merge을 시작한 사용자입니다.
첫 번째 파이프라인이 완료되면 두 번째 Merge Request을 즉시 Merge 대기열에 추가하려면 자동 Merge으로 설정를 선택합니다. 두 번째 Merge 기차 파이프라인은 대상 브랜치와 함께 Merge된 두 요청의 변경 내용으로 실행됩니다. 마찬가지로, 세 번째 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된 결과 파이프라인이 생성됩니다:
- 첫 번째 파이프라인은
A
의 변경 내용과 대상 브랜치의 결합된 변경 내용을 실행합니다. - 두 번째 파이프라인은
A
및B
의 변경 내용과 대상 브랜치의 결합된 변경 내용을 실행합니다. - 세 번째 파이프라인은
A
,B
, 및C
의 변경 내용과 대상 브랜치의 결합된 변경 내용을 실행합니다.
만약 B
의 파이프라인이 실패하면:
- 첫 번째 파이프라인(
A
)은 계속 실행됩니다. -
B
가 기차에서 제거됩니다. -
C
의 파이프라인 취소되고,A
와C
의 변경 내용으로 대상 브랜치와 결합된 새로운 파이프라인이 시작됩니다(B
의 변경 내용은 포함되지 않음).
그러면 A
가 성공적으로 완료되면 대상 브랜치로 Merge되고 C
는 계속 실행됩니다. 기차에 추가된 새로운 Merge Request은 이제 대상 브랜치에 있는 A
의 변경 내용과 Merge 기차의 C
변경 내용을 포함합니다.
Merge 기차의 병렬 실행이 기본 브랜치를 깨지는 커밋으로부터 방지하는 방법에 대한 데모를 시청해보세요.
자동 파이프라인 취소
GitLab CI/CD는 중복되는 파이프라인을 감지하여 리소스를 절약하기 위해 해당 파이프라인을 취소합니다.
중복되는 Merge 기차 파이프라인은 다음 경우에 발생합니다:
- Merge Request 중 하나에 대해 파이프라인이 실패함.
- Merge 기차를 건너뛰고 즉시 Merge함.
- Merge 기차에서 Merge Request을 제거함.
이러한 경우에 기존의 파이프라인은 이전 Merge 기차의 결합된 변경 내용을 비교했지만, 더는 유효하지 않기 때문에 새로운 Merge 기차 파이프라인을 생성해야 합니다. 그래서 이전의 파이프라인은 취소됩니다.
Merge 기차 활성화
disable_merge_trains
피처 플래그가 GitLab 16.5에서 제거되었습니다.
전제 조건:
- Maintainer 역할이 있어야 합니다.
- 리포지터리가 GitLab 리포지터리여야 하며, 외부 리포지터리가 아니어야 합니다.
- 파이프라인이 Merge Request 파이프라인을 사용하도록 구성되어 있어야 합니다. 그렇지 않으면 Merge Request이 미해결 상태에 머무를 수도 있고 파이프라인이 삭제될 수도 있습니다.
- Merge된 결과 파이프라인이 활성화되어 있어야 합니다.
Merge 기차를 활성화하려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 설정 > Merge Request을 선택합니다.
- Merge 방법 섹션에서 Merge 커밋이 선택되어 있는지 확인합니다.
- Merge 옵션 섹션에서 Merge된 결과 파이프라인을 활성화가 활성화되어 있는지 확인하고 Merge 기차 활성화를 선택합니다.
- 변경 사항 저장을 선택합니다.
Merge 기차 시작
전제 조건:
- 대상 브랜치로 Merge하거나 push할 권한이 있어야 합니다.
Merge 기차를 시작하려면:
- Merge Request을 방문합니다.
- 다음을 선택합니다:
- 파이프라인이 실행되지 않은 경우 Merge.
- 파이프라인이 실행 중인 경우 자동 Merge으로 설정.
Merge Request의 Merge 기차 상태는 파이프라인 위젯 아래에 표시되며 메시지는 새로운 Merge 기차가 시작되었으며 이 Merge Request이 대기열의 처음입니다.
와 유사합니다.
이제 다른 Merge Request을 기차에 추가할 수 있습니다.
Merge Request을 Merge Train에 추가
필수 조건:
- 대상 브랜치에 Merge하거나 푸시할 권한이 있어야 합니다.
Merge Request을 Merge Train에 추가하려면:
- Merge Request을 방문합니다.
- 선택합니다:
- 파이프라인이 실행되지 않을 때, Merge.
- 파이프라인이 실행 중일 때, 자동 Merge으로 설정.
Merge Request의 Merge Train 상태는 파이프라인 위젯 아래에 표시되며 Merge Train에 추가됨. Merge 대기 중인 Merge Request이 2개 있습니다.
와 유사한 메시지가 나타납니다.
각 Merge Train은 최대 스무 개의 파이프라인을 병렬로 실행할 수 있습니다. Merge Train에 스무 개 이상의 Merge Request을 추가하면 나머지 Merge Request은 대기열에 들어가 파이프라인이 완료될 때까지 대기합니다. Merge Train에 추가할 대기 중인 Merge Request의 수에는 제한이 없습니다.
Merge Train에서 Merge Request 제거
Merge Train에서 Merge Request을 제거하려면 자동 Merge 취소를 선택합니다. 나중에 다시 Merge Train에 Merge Request을 추가할 수 있습니다.
Merge Train에서 Merge Request을 제거하면:
- 제거된 Merge Request 이후 대기 중인 Merge Request에 대한 모든 파이프라인이 다시 시작됩니다.
- 중복된 파이프라인은 취소됩니다.
Merge Train 건너뛰고 즉시 Merge
긴급한 Merge Request(예: 즉시 Merge이 필요한 중요한 패치)이 있는 경우 즉시 Merge을 선택할 수 있습니다.
Merge Request을 즉시 Merge하면:
- Merge Request의 커밋이 Merge Train의 상태와 무관하게 Merge됩니다.
- Merge Train의 모든 다른 Merge Request을 위한 파이프라인은 취소됩니다.
- 새 Merge Train이 시작되고 초기 Merge Train의 모든 Merge Request은 이 새 Merge Train에 추가됩니다. 이 새 Merge Train 파이프라인에는 이전 즉시 Merge으로 추가된 Merge Request의 커밋이 포함됩니다.
Merge Train을 건너뛰고 즉시 Merge하여 Merge Train 파이프라인 재시작을 방지
- GitLab 16.5에서
merge_trains_skip_train
이라는 플래그로 도입되었습니다. 기본값으로 비활성화됨.- GitLab 16.10에서 실험 기능으로 활성화되었습니다.
플래그:
Self-managed GitLab에서는 기본적으로 이 기능이 사용 가능합니다. 기능을 숨기려면 관리자가 merge_trains_skip_train
이라는 피처 플래그를 비활성화할 수 있습니다. GitLab.com 및 GitLab Dedicated 서버에서는 이 기능을 사용할 수 있습니다.
Merge Train을 완전히 재시작하지 않고 Merge Request을 빠르게 Merge할 수 있습니다. 예를 들어 작은 문서 업데이트와 같이 파이프라인을 건너뛰도록 안전하게 변경 사항을 빠르게 Merge하는 데에 이 기능을 사용하세요.
Merge Train 건너뛰기는 실험적인 기능입니다. 향후 릴리스에서 변경되거나 완전히 삭제될 수 있습니다.
필수 조건:
- Maintainer 역할이 있어야 합니다.
- Merge Train을 활성화해야 합니다.
파이프라인을 재시작하지 않고 트레인을 건너뛰는 기능을 사용하려면:
- 좌측 사이드바에서 검색 또는 이동을 선택하여 프로젝트를 찾습니다.
- 설정 > Merge Request을 선택합니다.
- Merge 옵션 섹션에서 Merge Result 파이프라인을 활성화 및 Merge Train을 활성화 옵션이 활성화되어 있는지 확인합니다.
- Merge Train을 실패 없이 건너뛸 수 있음을 선택합니다.
- 변경 사항 저장을 선택합니다.
Merge Train을 건너뛰고 Merge Request을 Merge하려면, Merge Request Merge API 엔드포인트를 사용하여 skip_merge_train
속성을 true
로 설정하여 Merge합니다.
Merge Request이 Merge되고 기존 Merge Train 파이프라인은 취소되거나 재시작되지 않습니다.
문제 해결
Merge Request이 Merge Train에서 제외됨
Merge Train 파이프라인이 실행 중인 동안 Merge Request이 Merge Train에서 자동으로 제외되는 경우가 있습니다. 예를 들어, 이것은 다음과 같은 경우에 발생할 수 있습니다:
- Merge Request을 임시(Draft) 상태로 변경함.
- Merge 충돌.
- 모든 스레드가 해결될 때까지 Merge을 방지하는 옵션이 활성화될 때, 해결되지 않은 새 대화 스레드.
Merge Request이 Merge Train에서 제외된 이유를 시스템 노트에서 확인할 수 있습니다. 개요 탭의 활동 섹션에서 다음과 유사한 메시지를 확인할 수 있습니다: 사용자가 이 Merge Request을 Merge Train에서 제거했습니다: ...
자동 Merge을 사용할 수 없음
Merge Train이 활성화된 경우 자동 Merge(이전에 파이프라인 성공 시 Merge)을 사용하여 Merge Train을 건너뛸 수 없습니다. 자세한 내용은 이슈 12267을 참조하세요.
Merge Train 파이프라인을 다시 시도할 수 없음
Merge Train 파이프라인이 실패한 경우, Merge Request이 트레인에서 제외되고 파이프라인을 다시 시도할 수 없습니다. Merge Train 파이프라인은 Merge Request의 변경 내용 및 이미 트레인에 있는 다른 Merge Request의 변경 사항에 대한 Merge된 결과에 대해 실행됩니다. 따라서 Merge Request이 트레인에서 제외된 경우 Merge된 결과가 더 이상 최신 상태가 아니므로 파이프라인을 다시 시도할 수 없습니다.
다음을 수행할 수 있습니다:
- Merge Request을 트레인에 다시 추가하여 새로운 파이프라인을 트리거합니다.
- 작업이 가끔 실패하는 경우
retry
키워드를 작업에 추가합니다. 재시도 후 성공하면 Merge Request이 Merge Train에서 제거되지 않습니다.
Merge 기차에 추가할 수 없음
파이프라인은 성공해야 함 이 활성화되었지만 최신 파이프라인이 실패한 경우:
- 자동 Merge으로 설정 또는 Merge 옵션이 사용할 수 없습니다.
- Merge Request에
이 Merge Request의 파이프라인이 실패했습니다. 작업을 다시 시도하거나 실패를 수정하기 위해 새 커밋을 푸시하세요.
가 표시됩니다.
Merge Request을 다시 Merge 기차에 추가하기 전에 다음을 시도할 수 있습니다:
- 실패한 작업을 다시 시도합니다. 통과하고 다른 작업이 실패하지 않으면 파이프라인은 성공으로 표시됩니다.
- 전체 파이프라인을 다시 실행합니다. 파이프라인 탭에서 파이프라인 실행을 선택하세요.
- 문제를 수정하는 새 커밋을 푸시합니다. 이 작업도 새로운 파이프라인을 트리거합니다.
자세한 내용은 관련 이슈를 확인하세요.