- 상하위 파이프라인
- API를 사용하여 다중 프로젝트 파이프라인 트리거
- 다운스트림 파이프라인 보기
- 상위 파이프라인에서 아티팩트 가져오기
- CI/CD 변수를 다운스트림 파이프라인에 전달하기
- 배포를 위한 하류 파이프라인
- 문제 해결
하류 파이프라인
하류 파이프라인은 다른 파이프라인에 의해 트리거된 GitLab CI/CD 파이프라인입니다. 하류 파이프라인은 트리거한 상류 파이프라인과 독립적으로 동시에 실행됩니다.
- 상하위 파이프라인은 첫 번째 파이프라인과 동일한 프로젝트에서 트리거된 하류 파이프라인입니다.
- 다중 프로젝트 파이프라인은 첫 번째 파이프라인과 다른 프로젝트에서 트리거된 하류 파이프라인입니다.
가끔 상하위 파이프라인과 다중 프로젝트 파이프라인을 유사한 목적으로 사용할 수 있지만, 중요한 차이점이 있습니다.
상하위 파이프라인
부모 파이프라인은 동일한 프로젝트에서 하류 파이프라인을 트리거하는 파이프라인입니다. 하류 파이프라인은 자식 파이프라인이라고 불립니다.
자식 파이프라인:
- 부모 파이프라인과 동일한 프로젝트, ref 및 커밋 SHA에서 실행됩니다.
- 파이프라인이 실행 중인 ref의 전체 상태에 직접적인 영향을 미치지 않습니다. 예를 들어, 메인 브랜치의 파이프라인이 실패하면 “메인이 망가졌다”고 말하는 것이 일반적입니다. 자식 파이프라인의 상태는 자식 파이프라인이
strategy:depend
로 트리거되었을 때만 ref의 상태에 영향을 줍니다. - 새로운 파이프라인이 동일한 ref에 대해 생성될 때 자동으로 취소됩니다.(
interruptible
가 설정된 경우) - 프로젝트의 파이프라인 디렉터리에 표시되지 않습니다. 자식 파이프라인은 부모 파이프라인의 세부정보 페이지에서만 볼 수 있습니다.
중첩 자식 파이프라인
상위 및 하위 파이프라인은 최대 두 수준의 자식 파이프라인을 가질 수 있습니다.
부모 파이프라인은 많은 자식 파이프라인을 트리거할 수 있으며, 이러한 자식 파이프라인은 자신의 자식 파이프라인을 트리거할 수 있습니다. 또한 더 이상의 자식 파이프라인을 트리거할 수 없습니다.
관련_작업:
트리거:
include:
- local: path/to/child-pipeline.yml
관련_작업:
트리거:
프로젝트: project-group/my-downstream-project
트리거 작업이 시작되면, GitLab은 하류 파이프라인을 만들려고 시도하는 동안 작업의 초기 상태가 보류
로 표시됩니다. 하류 파이프라인이 성공적으로 생성되면 트리거 작업은 통과
로 표시되며, 그렇지 않으면 실패
로 표시됩니다. 또는 트리거 작업을 사용하여 하류 파이프라인의 상태를 표시할 수도 있습니다.
rules
를 사용하여 하류 파이프라인 작업 제어
CI/CD 변수 또는 rules
키워드를 사용하여 하류 파이프라인 작업 동작을 제어할 수 있습니다.
trigger
키워드를 사용하여 하류 파이프라인을 트리거하면 모든 작업의 [$CI_PIPELINE_SOURCE
사전 정의 변수의 값이 다음과 같습니다.
- 다중 프로젝트 파이프라인의 경우
pipeline
. - 상하위 파이프라인의 경우
parent_pipeline
.
예를 들어, 다음과 같이 프로젝트의 머지 요청 파이프라인을 실행하는 프로젝트에서 다중 프로젝트 파이프라인의 작업을 제어하려면:
작업1:
Rules:
- if: $CI_PIPELINE_SOURCE == "pipeline"
스크립트: echo "이 작업은 다중 프로젝트 파이프라인에서만 실행됩니다"
작업2:
Rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
스크립트: echo "이 작업은 머지 요청 파이프라인에서만 실행됩니다"
작업3:
Rules:
- if: $CI_PIPELINE_SOURCE == "pipeline"
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
스크립트: echo "이 작업은 다중 프로젝트와 머지 요청 파이프라인에서 실행됩니다"
다른 프로젝트의 자식 파이프라인 구성 파일 사용
include:project
를 사용하여 다른 프로젝트의 구성 파일로 자식 파이프라인을 트리거할 수 있습니다.
마이크로서비스_A:
트리거:
include:
- project: 'my-group/my-pipeline-library'
ref: 'main'
file: '/path/to/child-pipeline.yml'
여러 자식 파이프라인 구성 파일 결합
최대 세 개의 구성 파일을 포함하여 자식 파이프라인을 정의할 수 있습니다. 자식 파이프라인의 설정은 모든 구성 파일이 Merge된 구성으로 구성됩니다.
마이크로서비스_A:
트리거:
include:
- local: path/to/microservice_a.yml
- template: Jobs/SAST.gitlab-ci.yml
- project: 'my-group/my-pipeline-library'
ref: 'main'
file: '/path/to/child-pipeline.yml'
동적 자식 파이프라인
정적 파일이 아닌 작업에서 생성된 YAML 파일로부터 자식 파이프라인을 트리거할 수 있습니다. 이 기술은 변경된 콘텐츠를 타겟팅하거나 타겟 및 아키텍처의 매트릭스를 구축하는 데 매우 강력할 수 있습니다.
생성된 YAML 파일을 포함하는 아티팩트는 5 MB보다 크지 않아야합니다.
이 개요를 보려면 동적 중첩 파이프라인을 확인하세요.
동적 자식 파이프라인을 생성하는 예시 프로젝트인 Jsonnet을 사용한 동적 자식 파이프라인를 참조하세요. 이 프로젝트는 런타임에 .gitlab-ci.yml을 생성하는 데이터 템플릿 언어를 사용하는 방법을 보여줍니다. 이와 유사하게 Dhall 또는 ytt와 같은 템플릿 언어를 사용할 수 있습니다.
동적 자식 파이프라인 트리거
동적으로 생성된 구성 파일에서 자식 파이프라인을 트리거하려면:
-
작업에서 설정 파일을 생성하고 아티팩트로 저장하세요.
generate-config: stage: build script: generate-ci-config > generated-config.yml artifacts: paths: - generated-config.yml
-
생성된 구성 파일을 만든 작업 이후에 트리거 작업을 구성하세요. 생성된 아티팩트에
include: artifact
를 설정하고, 작업을 생성한 (include: job
) 작업에 대한include: job
을 설정하세요.child-pipeline: stage: test trigger: include: - artifact: generated-config.yml job: generate-config
이 예에서 GitLab은 generated-config.yml
을 검색하고 해당 파일의 CI/CD 구성과 함께 자식 파이프라인을 트리거합니다.
아티팩트 경로는 러너가 아닌 GitLab에 의해 구문 분석되므로 경로는 GitLab을 실행하는 OS의 구문에 일치해야 합니다. 예를 들어, GitLab이 Linux에서 실행되지만 Windows 러너를 사용하는 경우, 트리거 작업에 대한 경로 분리 기호는 /
로 사용됩니다. Windows 러너를 사용하는 작업과 같이 Windows 러너를 사용하는 기타 작업(예: 스크립트)은 \
를 사용합니다.
Merge Request 파이프라인에서 자식 파이프라인 실행
기본적으로 브랜치 파이프라인으로 실행되며 rules
또는 workflow:rules
를 사용하지 않을 때, 자식 파이프라인을 포함한 파이프라인은 브랜치 파이프라인으로 실행됩니다. Merge Request(부모) 파이프라인에서 트리거된 자식 파이프라인을 실행하도록 구성하려면 rules
또는 workflow:rules
를 사용하세요. 예를 들어, rules
를 사용하는 경우:
-
부모 파이프라인의 트리거 작업을 Merge Request에서 실행하도록 설정하세요:
trigger-child-pipeline-job: trigger: include: path/to/child-pipeline-configuration.yml rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event"
-
부모 파이프라인에 의해 트리거된 경우에만 자식 파이프라인 작업을 구성하는데
rules
를 사용하세요:job1: script: echo "이 자식 파이프라인 작업은 부모 파이프라인이 트리거한 모든 시간에 실행됩니다." rules: - if: $CI_PIPELINE_SOURCE == "parent_pipeline" job2: script: echo "이 자식 파이프라인 작업은 부모 파이프라인이 Merge Request 파이프라인인 경우에만 실행됩니다." rules: - if: $CI_MERGE_REQUEST_ID
자식 파이프라인에서는 $CI_PIPELINE_SOURCE
가 항상 parent_pipeline
의 값을 갖기 때문에:
- 자식 파이프라인 작업이 항상 실행되도록 하려면
if: $CI_PIPELINE_SOURCE == "parent_pipeline"
을 사용할 수 있습니다. - Merge Request 파이프라인에서만 부모 파이프라인에 의해 실행되는 자식 파이프라인 작업을 구성하려면
if: $CI_MERGE_REQUEST_ID
를 대신 사용하세요. 부모 파이프라인의CI_MERGE_REQUEST_*
predefined variables이 자식 파이프라인 작업으로 전달됩니다.
다중 프로젝트 파이프라인을 위한 브랜치 지정
다중 프로젝트 파이프라인을 트리거할 때 사용할 브랜치를 지정할 수 있습니다. GitLab은 브랜치의 헤드에 있는 커밋을 사용하여 다운스트림 파이프라인을 만듭니다. 예를 들어:
staging:
stage: deploy
trigger:
project: my/deployment
branch: stable-11-2
사용:
-
project
키워드를 사용하여 다운스트림 프로젝트의 전체 경로를 지정합니다. GitLab 15.3 이후에는 variable expansion을 사용할 수 있습니다. -
branch
키워드를 사용하여project
에서 지정한 프로젝트의 브랜치 또는 태그 이름을 지정합니다. 변수 확장을 사용할 수 있습니다.
API를 사용하여 다중 프로젝트 파이프라인 트리거
CI/CD job token (CI_JOB_TOKEN
)을 파이프라인 트리거 API 엔드포인트와 함께 사용하여 CI/CD 작업 내에서 다중 프로젝트 파이프라인을 트리거할 수 있습니다. GitLab은 작업 토큰으로 트리거된 파이프라인을 API 호출을 한 작업을 포함하는 파이프라인의 다운스트림 파이프라인으로 설정합니다.
예를 들어:
trigger_pipeline:
stage: deploy
script:
- curl --request POST --form "token=$CI_JOB_TOKEN" --form ref=main "https://gitlab.example.com/api/v4/projects/9/trigger/pipeline"
rules:
- if: $CI_COMMIT_TAG
environment: production
다운스트림 파이프라인 보기
파이프라인 상세 페이지에서 다운스트림 파이프라인은 그래프의 오른쪽에 있는 카드 디렉터리으로 표시됩니다. 이 보기에서는 다음을 수행할 수 있습니다:
- 트리거 작업을 선택하여 트리거된 다운스트림 파이프라인의 작업을 볼 수 있습니다.
- 파이프라인 카드에서 작업 확장 을 선택하여 다운스트림 파이프라인의 작업을 확장하여 볼 수 있습니다. 한 번에 하나의 다운스트림 파이프라인을 볼 수 있습니다.
- 파이프라인 카드 위에 마우스를 올려서 다운스트림 파이프라인을 트리거한 작업을 강조 표시할 수 있습니다.
다운스트림 파이프라인에서 실패한 작업 재시도 및 취소
- 그래프 보기에서 재시도는 GitLab 15.0에 도입되었으며 기본적으로 비활성화된
downstream_retry_action
이라는 플래그로 제공됩니다.- 그래프 보기에서 재시도는 GitLab 15.1에서 일반적으로 사용 가능하며 피처 플래그가 제거되었습니다.
실패한 작업 및 취소된 작업을 재시도하려면 재시도 ()를 선택하세요:
- 다운스트림 파이프라인의 상세 페이지에서.
- 파이프라인 그래프 보기에서 파이프라인 카드 위에서.
다운스트림 파이프라인 재생성
- 그래프 보기에서 재시도는 GitLab 15.10에 도입되었으며 기본적으로 비활성화된
ci_recreate_downstream_pipeline
이라는 플래그로 제공됩니다.- GitLab 15.11에서 일반적으로 사용 가능하며 피처 플래그
ci_recreate_downstream_pipeline
가 제거되었습니다.
해당 트리거 작업을 통해 다운스트림 파이프라인을 재생성할 수 있습니다. 새로 생성된 다운스트림 파이프라인이 파이프라인 그래프에서 현재의 다운스트림 파이프라인을 대체합니다.
다운스트림 파이프라인을 재생성하려면:
- 파이프라인 그래프의 트리거 작업 카드에서 다시 실행 ()을 선택하세요.
다운스트림 파이프라인 취소
- 그래프 보기에서 재시도는 GitLab 15.0에 도입되었으며 기본적으로 비활성화된
downstream_retry_action
이라는 플래그로 제공됩니다.- 그래프 보기에서 재시도는 GitLab 15.1에서 일반적으로 사용 가능하며 피처 플래그가 제거되었습니다.
아직 실행 중인 다운스트림 파이프라인을 취소하려면 취소 ()를 선택하세요:
- 다운스트림 파이프라인의 상세 페이지에서.
- 파이프라인 그래프 보기에서 파이프라인 카드 위에서.
다운스트림 파이프라인에서 부모 파이프라인 자동 취소
하나의 작업이 실패할 때 자식 파이프라인을 자동으로 취소할 수 있도록 구성할 수 있습니다.
부모 파이프라인은 자식 파이프라인의 작업 중 하나에 실패한 경우에만 자동으로 취소되며:
- 부모 파이프라인도 작업 실패 시 자동으로 취소하도록 설정된 경우.
- 트리거 작업이
strategy: depend
로 구성된 경우.
예를 들어:
-
.gitlab-ci.yml
의 내용:workflow: auto_cancel: on_job_failure: all trigger_job: trigger: include: child-pipeline.yml strategy: depend job3: script: - sleep 120
-
child-pipeline.yml
의 내용:# child-pipeline.yml의 내용 workflow: auto_cancel: on_job_failure: all job1: script: sleep 60 job2: script: - sleep 30 - exit 1
이 예제에서:
- 부모 파이프라인은 자식 파이프라인과
job3
을 동시에 트리거합니다. - 자식 파이프라인의
job2
가 실패하여 자식 파이프라인이 취소되고job1
도 중지됩니다. - 자식 파이프라인이 취소되었으므로 부모 파이프라인도 자동으로 취소됩니다.
트리거 작업에서 다운스트림 파이프라인의 상태를 미러링
다운스트림 파이프라인의 상태를 트리거 작업에서 strategy: depend
를 사용하여 미러링할 수 있습니다:
::Tabs
trigger_job:
trigger:
include:
- local: path/to/child-pipeline.yml
strategy: depend
trigger_job:
trigger:
project: my/project
strategy: depend
다중 프로젝트 파이프라인 보기를 파이프라인 그래프에서 확인
- 이동함 GitLab 16.8에서 GitLab Premium에서 GitLab Free로.
다중 프로젝트 파이프라인을 트리거한 후, 다운스트림 파이프라인은 파이프라인 그래프 오른쪽에 표시됩니다.
파이프라인 미니 그래프에서 다운스트림 파이프라인은 미니 그래프 오른쪽에 표시됩니다.
상위 파이프라인에서 아티팩트 가져오기
상위 파이프라인에서 needs:pipeline:job
을 사용하여
상위 파이프라인에서 아티팩트를 가져옵니다:
-
상위 파이프라인에서 작업 중에
artifacts
키워드로 아티팩트를 저장한 다음, 트리거 작업으로 다운스트림 파이프라인을 트리거하세요:build_artifacts: stage: build script: - echo "This is a test artifact!" >> artifact.txt artifacts: paths: - artifact.txt deploy: stage: deploy trigger: include: - local: path/to/child-pipeline.yml variables: PARENT_PIPELINE_ID: $CI_PIPELINE_ID
-
다운스트림 파이프라인의 작업에서
needs:pipeline:job
를 사용하여 아티팩트를 가져옵니다.test: stage: test script: - cat artifact.txt needs: - pipeline: $PARENT_PIPELINE_ID job: build_artifacts
job
을 아티팩트를 생성한 상위 파이프라인의 작업으로 설정하세요.
needs:project
를 사용하여 상위 파이프라인에서
아티팩트를 가져옵니다:
- GitLab 15.9 이상에서는 상위 프로젝트의 작업 토큰 범위 허용 디렉터리에 다운스트림 프로젝트를 추가하세요.
-
상위 파이프라인에서 작업 중에
artifacts
키워드로 아티팩트를 저장한 다음, 트리거 작업으로 다운스트림 파이프라인을 트리거하세요:build_artifacts: stage: build script: - echo "This is a test artifact!" >> artifact.txt artifacts: paths: - artifact.txt deploy: stage: deploy trigger: my/downstream_project # 파이프라인을 트리거할 프로젝트의 경로
-
다운스트림 파이프라인의 작업에서
needs:project
를 사용하여 아티팩트를 가져옵니다.test: stage: test script: - cat artifact.txt needs: - project: my/upstream_project job: build_artifacts ref: main artifacts: true
다음을 설정하세요:
- 아티팩트를 생성한 상위 파이프라인의 작업으로
job
를 설정합니다. -
ref
를 브랜치로 설정하세요. -
artifacts
를true
로 설정하세요.
- 아티팩트를 생성한 상위 파이프라인의 작업으로
상위 Merge Request 파이프라인에서 아티팩트 가져오기
상위 파이프라인에서 needs:project
를 사용하여 다운스트림 파이프라인에 아티팩트를 전달할 때,
ref
값은 일반적으로 main
또는 development
과 같은 브랜치 이름입니다.
Merge Request 파이프라인의 경우, ref
값은 refs/merge-requests/<id>/head
형식으로 되어 있으며,
여기서 id
는 Merge Request ID입니다. 브랜치 파이프라인의 경우와는 달리 ref
로 브랜치 이름을 사용하지 마세요,
왜냐하면 다운스트림 파이프라인이 가장 최신 브랜치 파이프라인에서 아티팩트를 가져오려고 시도하기 때문입니다.
브랜치
파이프라인이 아닌 상위 Merge Request
파이프라인에서 아티팩트를 가져오려면,
변수 상속을 사용하여 $CI_MERGE_REQUEST_REF_PATH
를 다운스트림 파이프라인으로 전달하세요:
- GitLab 15.9 이상에서는 상위 프로젝트의 작업 토큰 범위 허용 디렉터리에 다운스트림 프로젝트를 추가하세요.
- 상위 파이프라인의 작업에서
artifacts
키워드를 사용하여 아티팩트를 저장하세요. -
다운스트림 파이프라인을 트리거하는 작업에서
$CI_MERGE_REQUEST_REF_PATH
변수를 전달하세요:build_artifacts: rules: - if: $CI_PIPELINE_SOURCE == 'merge_request_event' stage: build script: - echo "This is a test artifact!" >> artifact.txt artifacts: paths: - artifact.txt upstream_job: rules: - if: $CI_PIPELINE_SOURCE == 'merge_request_event' variables: UPSTREAM_REF: $CI_MERGE_REQUEST_REF_PATH trigger: project: my/downstream_project branch: my-branch
-
다운스트림 파이프라인의 작업에서
needs:project
및 전달된 변수를ref
로 사용하여 상위 파이프라인에서 아티팩트를 가져옵니다:test: stage: test script: - cat artifact.txt needs: - project: my/upstream_project job: build_artifacts ref: $UPSTREAM_REF artifacts: true
이 방법을 사용하여 상위 Merge Request 파이프라인에서 아티팩트를 가져올 수 있지만, 머지 결과 파이프라인에서는 가져올 수 없습니다.
CI/CD 변수를 다운스트림 파이프라인에 전달하기
CI/CD 변수를 다운스트림 파이프라인으로 전달하는 데는 변수가 생성되거나 정의된 위치에 따라 몇 가지 다른 방법을 사용할 수 있습니다.
YAML로 정의된 CI/CD 변수 전달
variables
키워드를 사용하여 CI/CD 변수를 다운스트림 파이프라인으로 전달할 수 있습니다.
이러한 변수는 변수 우선순위에 대한 “트리거 변수”입니다.
예를 들어:
variables:
VERSION: "1.0.0"
staging:
variables:
ENVIRONMENT: staging
stage: deploy
trigger:
include:
- local: path/to/child-pipeline.yml
variables:
VERSION: "1.0.0"
staging:
variables:
ENVIRONMENT: staging
stage: deploy
trigger: my-group/my-deployment-project
ENVIRONMENT
변수는 다운스트림 파이프라인에서 정의된 모든 작업에서 사용할 수 있습니다.
모든 파이프라인 작업, 트리거 작업을 포함한 모든 작업은 전역 variables
을 상속하므로,
VERSION
전역 변수도 다운스트림 파이프라인에서 사용할 수 있습니다.
전역 변수가 전달되지 않도록 하기
전역 CI/CD 변수를 다운스트림 파이프라인에 전달하지 않도록 하려면
inherit:variables:false
을 사용할 수 있습니다.
예를 들어:
variables:
GLOBAL_VAR: value
trigger-job:
inherit:
variables: false
variables:
JOB_VAR: value
trigger:
include:
- local: path/to/child-pipeline.yml
variables:
GLOBAL_VAR: value
trigger-job:
inherit:
variables: false
variables:
JOB_VAR: value
trigger: my-group/my-project
GLOBAL_VAR
변수는 트리거된 파이프라인에서 사용할 수 없지만, JOB_VAR
은 사용할 수 있습니다.
미리 정의된 변수 전달
상위 파이프라인에 대한 정보를 전달하려면 미리 정의된 CI/CD 변수를 사용하여 보간(interpolation)하십시오. 트리거 작업에 미리 정의된 변수를 새로운 작업 변수로 저장하고, 이를 하류 파이프라인으로 전달합니다. 예를 들면:
trigger-job:
variables:
PARENT_BRANCH: $CI_COMMIT_REF_NAME
trigger:
include:
- local: path/to/child-pipeline.yml
trigger-job:
variables:
UPSTREAM_BRANCH: $CI_COMMIT_REF_NAME
trigger: my-group/my-project
하류 파이프라인에서는 상위 파이프라인의 $CI_COMMIT_REF_NAME
미리 정의된 CI/CD 변수 값을 포함하는 UPSTREAM_BRANCH
변수를 사용할 수 있습니다.
이 방법을 사용하여 마스크된 변수를 다중 프로젝트 파이프라인으로 전달하지 마십시오. CI/CD 마스킹 구성이 하류 파이프라인으로 전달되지 않으며, 변수가 하류 프로젝트의 작업 로그에서 언마스킹될 수 있습니다.
이 방법을 사용하여 작업 수준으로 지속되는 변수를 하류 파이프라인으로 전달할 수 없습니다. 이러한 변수는 트리거 작업에서 사용할 수 없기 때문입니다.
상위 파이프라인이 하류 파이프라인보다 우선합니다. 상하 프로젝트 모두에서 동일한 이름의 두 변수가 정의된 경우, 상위 프로젝트에서 정의된 변수가 우선합니다.
작업에서 생성된 dotenv 변수 전달
dotenv
변수 상속을 사용하여 하류 파이프라인으로 변수를 전달할 수 있습니다.
예를 들어, 다중 프로젝트 파이프라인에서:
- 변수를
.env
파일에 저장합니다. -
.env
파일을dotenv
보고서로 저장합니다. -
하류 파이프라인을 트리거합니다.
build_vars: stage: build script: - echo "BUILD_VERSION=hello" >> build.env artifacts: reports: dotenv: build.env deploy: stage: deploy trigger: my/downstream_project
-
하류 파이프라인의
test
작업을needs
로 상위 프로젝트의build_vars
작업에서 변수를 상속하도록 설정합니다.test
작업은dotenv
보고서의 변수를 상속하며, 스크립트에서BUILD_VERSION
에 액세스할 수 있습니다.test: stage: test script: - echo $BUILD_VERSION needs: - project: my/upstream_project job: build_vars ref: master artifacts: true
하류 파이프라인으로 전달할 변수 유형 제어
trigger:forward
키워드를 사용하여 하류 파이프라인으로 전달할 변수 유형을 지정할 수 있습니다. 전달된 변수는 가장 높은 우선순위를 갖는 트리거 변수로 간주됩니다.
배포를 위한 하류 파이프라인
environment
키워드를 trigger
와 함께 사용할 수 있습니다. 배포 및 애플리케이션 프로젝트를 별도로 관리하는 경우 트리거 작업에서 environment
를 사용하려 할 수 있습니다.
deploy:
trigger:
project: project-group/my-downstream-project
environment: production
하류 파이프라인은 인프라를 프로비저닝하고 지정된 환경으로 배포한 후 배포 상태를 상위 프로젝트에 반환할 수 있습니다.
상위 프로젝트에서는 이 환경 및 배포를 보고할 수 있습니다.
고급 예제
이 예제 구성에는 다음과 같은 동작이 포함됩니다:
- 상위 프로젝트는 브랜치 이름을 기반으로 환경 이름을 동적으로 구성합니다.
- 상위 프로젝트는
UPSTREAM_*
변수를 사용하여 배포 내용을 하류 프로젝트로 전달합니다.
상위 프로젝트의 .gitlab-ci.yml
:
stages:
- deploy
- cleanup
.downstream-deployment-pipeline:
variables:
UPSTREAM_PROJECT_ID: $CI_PROJECT_ID
UPSTREAM_ENVIRONMENT_NAME: $CI_ENVIRONMENT_NAME
UPSTREAM_ENVIRONMENT_ACTION: $CI_ENVIRONMENT_ACTION
trigger:
project: project-group/deployment-project
branch: main
strategy: depend
deploy-review:
stage: deploy
extends: .downstream-deployment-pipeline
environment:
name: review/$CI_COMMIT_REF_SLUG
on_stop: stop-review
stop-review:
stage: cleanup
extends: .downstream-deployment-pipeline
environment:
name: review/$CI_COMMIT_REF_SLUG
action: stop
when: manual
하류 프로젝트의 .gitlab-ci.yml
:
deploy:
script: echo "Deploy to ${UPSTREAM_ENVIRONMENT_NAME} for ${UPSTREAM_PROJECT_ID}"
rules:
- if: $CI_PIPELINE_SOURCE == "pipeline" && $UPSTREAM_ENVIRONMENT_ACTION == "start"
stop:
script: echo "Stop ${UPSTREAM_ENVIRONMENT_NAME} for ${UPSTREAM_PROJECT_ID}"
rules:
- if: $CI_PIPELINE_SOURCE == "pipeline" && $UPSTREAM_ENVIRONMENT_ACTION == "stop"
문제 해결
트리거 작업이 실패하고 다중 프로젝트 파이프라인이 생성되지 않음
다중 프로젝트 파이프라인에서 다음과 같은 경우 트리거 작업이 실패하고 하류 파이프라인이 생성되지 않습니다:
- 하류 프로젝트가 찾을 수 없는 경우.
- 상위 파이프라인을 만드는 사용자에게 허가 권한이 없을 경우.
- 하류 파이프라인이 보호된 브랜치를 대상으로 하며 사용자가 해당 보호된 브랜치에 대한 파이프라인을 실행할 권한이 없는 경우. 자세한 내용은 보호된 브랜치에서의 파이프라인 보안을 참조하십시오.
하류 프로젝트에서 권한 문제를 겪고 있는 사용자를 식별하려면 다음 명령을 사용하여 트리거 작업을 확인하고 user_id
속성을 살펴보십시오.
Ci::Bridge.find(<job_id>)
자식 파이프라인의 작업이 실행되지 않을 때
부모 파이프라인이 Merge Request 파이프라인인 경우, 자식 파이프라인은 작업이 실행되도록 하려면 workflow:rules
또는 rules
를 사용해야 합니다.
자식 파이프라인의 모든 작업이 누락되거나 잘못된 rules
구성으로 인해 실행되지 못한 경우:
- 자식 파이프라인은 시작하지 못합니다.
- 부모 파이프라인의 트리거 작업은
하류 파이프라인을 만들 수 없음, 선택한 트리거에 대해 파이프라인을 실행할 수 없음. 구성된 rules로 인해 파이프라인에 작업이 추가되지 않았습니다.
라는 오류가 표시됩니다.
Ref is ambiguous
태그와 동일한 이름의 브랜치가 있을 때 태그로 다중 프로젝트 파이프라인을 트리거할 수 없습니다. 이로 인해 다음과 같은 오류가 발생하여 하류 파이프라인을 생성할 수 없습니다: downstream pipeline can not be created, Ref is ambiguous
.
태그 이름과 일치하는 브랜치 이름이 없는 경우에만 다중 프로젝트 파이프라인을 트리거할 수 있습니다.
상류 파이프라인에서 작업 아티팩트를 다운로드할 때 403 Forbidden
오류
GitLab 15.9 이후로, CI/CD 작업 토큰은 해당 파이프라인을 실행하는 프로젝트에 대해 범위가 지정됩니다. 따라서 하류 파이프라인의 작업 토큰은 기본적으로 상류 프로젝트에 액세스할 수 없습니다.
이 문제를 해결하려면 하류 프로젝트를 작업 토큰 범위 허용 디렉터리에 추가합니다.