병합 기차

Tier: 프리미엄, 얼티메이트 Offering: GitLab.com, Self-managed, GitLab Dedicated

- GitLab 16.0 이후에서 병합 기차 시작파이프라인이 성공하면 병합 기차 시작 버튼이 자동 병합 설정이 되었습니다. 병합 기차에서 제거자동 병합 취소로 변경되었습니다. - 빠른 전진반선형 병합 방법의 지원은 GitLab 16.5에서 특성 플래그fast_forward_merge_trains_support로 도입되었으며, 기본적으로 활성화되어 있습니다.

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

더 많은 정보:

병합 기차 워크플로우

병합 기차는 모든 병합 요청이 병합을 대기하는 경우에 시작됩니다. 그리고 병합을 선택합니다. GitLab은 기본 브랜치에 병합할 수 있는지 확인하는 병합 기차 파이프라인을 시작합니다. 이 첫 번째 파이프라인은 병합된 결과 파이프라인과 동일하며, 소스와 대상 브랜치의 변경사항이 결합하여 실행됩니다. 내부 병합된 결과 커밋의 작성자는 병합을 시작한 사용자입니다.

첫 번째 파이프라인이 완료되면 두 번째 병합 요청을 즉시 병합 대기열에 넣으려면 자동 병합 설정을 선택하세요. 두 번째 병합 기차 파이프라인은 모든 병합 요청의 변화와 대상 브랜치와 함께 실행됩니다. 동일하게, 세 번째 병합 요청이 추가되는 경우 해당 파이프라인은 대상 브랜치와 병합된 모든 세 개의 병합 요청의 변경사항과 실행됩니다. 이러한 모든 파이프라인은 병렬로 실행됩니다.

각 병합 요청은 다음과 같은 경우에만 대상 브랜치로 병합됩니다:

  • 병합 요청의 파이프라인이 성공적으로 완료될 때
  • 그 앞선 병합 요청들이 모두 병합될 때

병합 기차 파이프라인이 실패하면, 해당 병합 요청은 병합되지 않습니다. GitLab은 해당 병합 요청을 병합 기차에서 제거하고 해당 병합 요청 뒤에 대기열에 넣은 모든 병합 요청을 위해 새 파이프라인을 시작합니다.

예를 들어:

A, B, C 세 가지 병합 요청이 순서대로 병합 기차에 추가되어 병합된 결과 파이프라인이 병렬로 실행됩니다.

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

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

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

그리고 A가 성공적으로 완료되면 대상 브랜치로 병합되고, C는 계속 실행됩니다. 기차에 새로 추가된 병합 요청은 이제 대상 브랜치에 있는 A의 변경사항과 병합 기차에서의 C의 변경사항이 포함됩니다.

병합 기차의 병렬 실행이 기본 브랜치의 커밋을 막는 것을 방지하는 방법을 시연한 비디오를 시청하세요.

자동 파이프라인 취소

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

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

이러한 경우에 GitLab은 기존의 파이프라인을 취소하고 새로운 병합 기차 파이프라인을 만들어야 합니다. 이전의 파이프라인은 더 이상 유효하지 않은 이전 병합 기차의 결합된 변경을 비교하고 있기 때문에 이전 파이프라인은 취소됩니다.

병합 기차 활성화

  • disable_merge_trains 기능 플래그가 GitLab 16.5에서 제거되었습니다.

전제 조건:

병합 기차를 활성화하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 귀하의 프로젝트를 찾습니다.
  2. 설정 > 병합 요청을 선택합니다.
  3. 병합 방법 섹션에서 병합 커밋이 선택되었는지 확인합니다.
  4. 병합 옵션 섹션에서 병합된 결과 파이프라인 활성화가 활성화되어 있는지 확인하고 병합 기차 활성화를 선택합니다.
  5. 변경 사항 저장을 선택합니다.

병합 기차 시작하기

전제 조건:

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

병합 기차를 시작하려면:

  1. 병합 요청을 방문합니다.
  2. 선택:
    • 파이프라인이 실행 중이 아닌 경우, 병합을 선택합니다.
    • 파이프라인이 실행 중인 경우, 자동 병합으로 설정을 선택합니다.

병합 요청의 병합 기차 상태는 파이프라인 위젯 아래에 표시되며 새 병합 기차가 시작되었으며 이 병합 요청이 첫 번째로 대기 중입니다.와 유사한 메시지가 표시됩니다.

이제 다른 병합 요청을 기차에 추가할 수 있습니다.

병합 기차에 병합 요청 추가

전제 조건:

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

병합 기차에 병합 요청을 추가하려면:

  1. 병합 요청을 방문합니다.
  2. 선택:
    • 파이프라인이 실행 중이 아닌 경우, 병합을 선택합니다.
    • 파이프라인이 실행 중인 경우, 자동 병합으로 설정을 선택합니다.

병합 요청의 병합 기차 상태는 파이프라인 위젯 아래에 표시되며 병합 기차에 추가되었습니다. 병합을 위해 대기 중인 병합 요청이 2개 있습니다.와 유사한 메시지가 표시됩니다.

각 병합 기차는 병렬로 최대 20개의 파이프라인을 실행할 수 있습니다. 20개 이상의 병합 요청을 병합 기차에 추가하면 추가 병합 요청은 대기열에 들어가 파이프라인이 완료될 때까지 대기합니다. 병합 기차에 참여하기를 기다리는 대기 중인 병합 요청 수에는 제한이 없습니다.

병합 기차에서 병합 요청 제거

병합 기차에서 병합 요청을 제거하려면 자동 병합 취소를 선택합니다. 나중에 다시 병합 기차에 병합 요청을 추가할 수 있습니다.

병합 기차에서 병합 요청을 제거하면:

  • 제거된 병합 요청 이후에 대기 중인 병합 요청에 대한 모든 파이프라인이 다시 시작됩니다.
  • 중복된 파이프라인이 취소됩니다.

병합 기차 건너뛰고 즉시 병합

중요한 병합 요청, 예를 들어 긴급하게 병합해야 하는 중요한 패치와 같은 경우, 즉시 병합을 선택할 수 있습니다.

병합 요청을 즉시 병합하면:

  • 병합 요청의 커밋이 병합되고 병합 기차의 상태와는 무관하게 해당 병합 요청 이후에 병합 기차의 다른 병합 요청에 대한 파이프라인이 취소됩니다.
  • 새로운 병합 기차가 시작되고 원래 병합 기차의 모든 병합 요청이 이 새로운 병합 기차에 추가되며 각각에 대한 새로운 병합 기차 파이프라인이 생성됩니다. 이러한 새로운 병합 기차 파이프라인에는 즉시 병합된 병합 요청이 추가됩니다.

경고: 즉시 병합을 사용하면 많은 CI/CD 자원을 사용할 수 있습니다. 이 옵션은 심각한 상황에서만 사용하세요.

참고: 대상 브랜치가 소스 브랜치보다 뒤에 있을 경우 프로젝트가 fast-forward 병합을 사용하고 있는 경우 즉시 병합 옵션이 사용할 수 없을 수 있습니다. 자세한 내용은 issue 434070를 참조하세요.

병합 기차를 건너뛰고 즉시 병합하기 위해 병합 기차가 거부될 수 있게 허용

상태: 실험

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

이 기능을 사용하여 파이프라인을 건너뛸 수 있는 변경 사항을 빠르게 병합할 수 있습니다. 예를 들어, 작은 문서 업데이트와 같이 파이프라인을 건너뛰도록 안전하게 변경할 수 있는 변경 사항을 빠르게 병합하기 위해 이 기능을 사용할 수 있습니다.

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

경고: 이 기능을 사용하여 보안이나 버그 수정을 빠르게 병합할 수 있지만, 기차를 건너뛴 병합 요청의 변경 사항은 기차의 다른 병합 요청 중 어느 것과도 검증되지 않습니다. 만약 이러한 다른 병합 기차 파이프라인이 성공적으로 병합되면, 결합된 변경 사항이 호환되지 않을 위험이 있습니다. 그러면 대상 브랜치를 해결하기 위해 추가 작업이 필요할 수 있습니다.

전제 조건:

  • 관리자(Maintainer) 역할이 있어야 합니다.
  • 병합 기차가 활성화되어 있어야 합니다.

파이프라인을 다시 시작하지 않고 기차를 건너뛰어 병합하는 기능을 활성화하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 귀하의 프로젝트를 찾습니다.
  2. 설정 > 병합 요청을 선택합니다.
  3. 병합 옵션 섹션에서 병합된 결과 파이프라인 옵션과 병합 기차 활성화 옵션이 모두 활성화되어 있는지 확인합니다.
  4. 병합 기차 건너뛰기를 허용을 선택합니다.
  5. 변경 사항 저장을 선택합니다.

병합 요청을 기차를 건너뛰어 병합하기 위해 병합 요청 병합 API 엔드포인트를 사용하고 skip_merge_train 속성을 true로 설정합니다.

병합 요청이 병합되고 이미 있는 병합 기차 파이프라인이 취소되거나 다시 시작되지 않습니다.

문제 해결

병합 요청이 병합 기차에서 삭제됨

병합 요청이 병합 기차 파이프라인이 실행 중일 때 병합할 수 없게 되면, 병합 기차가 해당 병합 요청을 자동으로 삭제합니다. 예를 들어, 이는 다음과 같은 이유로 발생할 수 있습니다:

병합 요청이 병합 기차에서 삭제된 이유를 확인하려면 시스템 노트에서 확인할 수 있습니다. 개요 탭의 활동 섹션에서 다음과 유사한 메시지를 확인하세요: 사용자가 이 병합 요청을 병합 기차에서 제거했습니다. 이유: ...

자동 병합 사용 불가

병합 기차가 활성화된 상태에서 병합 기차를 건너뛰기 위해 자동 병합 (이전의 파이프라인 성공 시 병합)을 사용할 수 없습니다. 자세한 내용은 이슈 12267를 참조하세요.

병합 기차 파이프라인 다시 시도 불가

병합 기차 파이프라인이 실패한 경우, 병합 요청이 기차에서 삭제되고 파이프라인을 다시 시도할 수 없습니다. 병합 기차 파이프라인은 병합 요청의 변경 내용과 이미 기차에 있는 다른 병합 요청의 변경 내용을 병합한 결과물에 대해 실행됩니다. 따라서 병합 요청이 기차에서 삭제되면, 병합된 결과물이 오래되어 파이프라인을 다시 시도할 수 없습니다.

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

  • 병합 요청을 다시 기차에 추가하여 새로운 파이프라인을 트리거합니다.
  • 임시로 실패한 작업에 retry 키워드를 추가하세요. 재시도 후 성공하면 병합 요청이 병합 기차에서 제거되지 않습니다.

병합 기차에 추가할 수 없음

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

  • 자동 병합 설정 또는 병합 옵션이 사용할 수 없습니다.
  • 병합 요청에 이 병합 요청의 파이프라인이 실패했습니다. 작업을 다시 시도하거나 새로운 커밋을 푸시하여 오류를 수정하십시오.라는 메시지가 표시됩니다.

병합 요청을 다시 병합 기차에 추가하기 전에 다음을 시도해 볼 수 있습니다:

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

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