Merge Request 파이프라인
GitLab 14.8에서
pipelines for merge requests
를merge request pipelines
로 이름이 변경되었습니다.
소스 브랜치에서 변경을 할 때마다 파이프라인을 구성할 수 있습니다.
이 유형의 파이프라인인 Merge Request 파이프라인은 다음 경우에 실행됩니다:
- 하나 이상의 커밋이 있는 소스 브랜치에서 새로운 Merge Request을 생성할 때.
- Merge Request을 위한 소스 브랜치에 새로운 커밋을 푸시할 때.
- Merge Request의 Pipelines 탭으로 이동하여 Run pipeline을 선택할 때.
또한, Merge Request 파이프라인은:
이러한 파이프라인은 파이프라인 디렉터리에서 merge request
레이블을 표시합니다.
Merge Request 파이프라인은 소스 브랜치의 내용에만 적용되며, 대상 브랜치의 내용은 무시됩니다. 소스와 대상 브랜치의 결과를 테스트하는 파이프라인을 실행하려면 Merge된 결과 파이프라인을 사용하세요.
전제 조건
Merge Request 파이프라인을 사용하려면:
- 프로젝트의
.gitlab-ci.yml
파일에 Merge Request 파이프라인에서 실행되는 작업이 구성되어 있어야 합니다. 이를 위해 다음을 사용할 수 있습니다: - Merge Request 파이프라인을 실행하려면 소스 프로젝트에서 적어도 개발자 역할이 있어야 합니다.
- 귀하의 리포지터리는 GitLab 리포지터리여야 하며, 외부 리포지터리가 아니어야 합니다.
작업 추가를 위해 rules
사용
rules
키워드를 사용하여 Merge Request 파이프라인에서 실행될 작업을 구성합니다. 예를 들어:
job1:
script:
- echo "이 작업은 Merge Request 파이프라인에서 실행됩니다"
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
또한, 전체 파이프라인을 Merge Request 파이프라인에서 실행되도록 구성하기 위해 workflow: rules
키워드를 사용할 수 있습니다. 예를 들어:
workflow:
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
job1:
script:
- echo "이 작업은 Merge Request 파이프라인에서 실행됩니다"
job2:
script:
- echo "이 작업도 Merge Request 파이프라인에서 실행됩니다"
Merge Request, 태그, 기본 브랜치에 대해 파이프라인을 실행할 수 있는 일반적인 workflow
구성은 다음과 같습니다:
workflow:
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
- if: $CI_COMMIT_TAG
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
작업 추가를 위해 only
사용
rules
가 선호되는 방법이지만, merge_requests
와 함께 only
키워드를 사용하여 Merge Request 파이프라인에서 실행될 작업을 구성할 수도 있습니다. 예를 들어:
job1:
script:
- echo "이 작업은 Merge Request 파이프라인에서 실행됩니다"
only:
- merge_requests
포크된 프로젝트에서 사용
- GitLab 13.3에서 도입되었습니다.
- GitLab Premium으로 이전되었습니다.
포크에서 작업하는 외부 기여자는 부모 프로젝트에서 파이프라인을 생성할 수 없습니다.
부모 프로젝트에 제출된 포크에서의 Merge Request은 다음과 같은 파이프라인을 트리거합니다:
- 생성되고 실행되는 것은 부모(대상) 프로젝트가 아닌 포크(소스) 프로젝트입니다.
- 포크 프로젝트의 CI/CD 구성, 리소스 및 프로젝트 CI/CD 변수를 사용합니다.
포크용 파이프라인은 부모 프로젝트에서 fork 배지와 함께 표시됩니다:
부모 프로젝트에서 파이프라인 실행
부모 프로젝트의 프로젝트 멤버는 포크 프로젝트에서 제출된 Merge Request을 위해 파이프라인을 트리거할 수 있습니다. 이 파이프라인은 다음과 같습니다:
- 생성되고 부모(대상) 프로젝트에서 실행됩니다.
- 포크 프로젝트의 브랜치에 있는 CI/CD 구성을 사용합니다.
- 부모 프로젝트의 CI/CD 설정, 리소스 및 프로젝트 CI/CD 변수를 사용합니다.
- 파이프라인을 트리거하는 부모 프로젝트 멤버의 권한을 사용합니다.
부모 프로젝트에서 포크 프로젝트의 Merge Request에 대해 파이프라인을 실행하여 Merge 후 파이프라인이 부모 프로젝트에서 통과하는지 확인하세요. 또한, 포크 프로젝트의 러너를 신뢰하지 않는 경우 부모 프로젝트에서 파이프라인을 실행하면 부모 프로젝트의 신뢰할 수 있는 러너를 사용합니다.
/rebase
빠른 조치를 통해 파이프라인을 트리거하지 않는 한, GitLab은 파이프라인이 실행되기 전에 수락해야 하는 경고를 표시합니다. 그렇지 않으면 경고가 표시되지 않습니다.전제 조건:
- 부모 프로젝트의
.gitlab-ci.yml
파일을 Merge Request 파이프라인에서 작업을 실행하도록 구성해야 합니다. - Merge Request 파이프라인을 실행하려면 GitLab CI/CD 파이프라인 실행 권한이 있는 부모 프로젝트의 멤버여야 합니다. 브랜치가 보호되어 있는 경우 추가 권한이 필요할 수도 있습니다.
- 파이프라인을 실행하는 사용자가 포크 프로젝트를 볼 수 있어야 합니다. 그렇지 않으면 Pipelines 탭이 Merge Request에 표시되지 않습니다.
부모 프로젝트에서 포크 프로젝트의 Merge Request에 대해 UI를 사용하여 파이프라인을 실행하려면:
- Merge Request에서 Pipelines 탭으로 이동합니다.
- Run pipeline을 선택합니다. 경고를 읽고 수락해야 파이프라인이 실행됩니다.
프로젝트 포크에서 파이프라인 실행 방지
- GitLab 15.3에 도입됨.
부모 프로젝트에서 포크된 프로젝트에 대해 새 파이프라인을 실행하는 것을 방지하려면
프로젝트 API를 사용하여 ci_allow_fork_pipelines_to_run_in_parent_project
설정을 비활성화하세요.
사용 가능한 미리 정의된 변수
Merge Request 파이프라인을 사용할 때 다음을 사용할 수 있습니다:
- 브랜치 파이프라인에서 사용할 수 있는 모든 미리 정의된 변수.
- Merge Request 파이프라인의 작업에서만 사용할 수 있는 추가 미리 정의된 변수.