InfoGrab DocsInfoGrab Docs

다운스트림 파이프라인 문제 해결

요약

멀티 프로젝트 파이프라인에서 다음과 같은 경우 트리거 job이 실패하고 다운스트림 파이프라인이 생성되지 않습니다: 다운스트림 프로젝트를 찾을 수 없는 경우. 업스트림 파이프라인을 생성하는 사용자가 다운스트림 프로젝트에서 파이프라인을 생성할 권한이 없는 경우.

트리거 job 실패 및 멀티 프로젝트 파이프라인 미생성#

멀티 프로젝트 파이프라인에서 다음과 같은 경우 트리거 job이 실패하고 다운스트림 파이프라인이 생성되지 않습니다:

  • 다운스트림 프로젝트를 찾을 수 없는 경우.

  • 업스트림 파이프라인을 생성하는 사용자가 다운스트림 프로젝트에서 파이프라인을 생성할 권한이 없는 경우.

  • 다운스트림 파이프라인이 보호된 브랜치를 대상으로 하고 사용자가 보호된 브랜치에 대해 파이프라인을 실행할 권한이 없는 경우. 자세한 내용은 보호된 브랜치의 파이프라인 보안을 참조합니다.

다운스트림 프로젝트에서 권한 문제가 있는 사용자를 파악하려면 Rails 콘솔에서 다음 명령을 사용하여 트리거 job을 확인하고 user_id 속성을 살펴볼 수 있습니다.

Ci::Bridge.find(<job_id>)

파이프라인 실행 시 자식 파이프라인의 job이 생성되지 않음#

부모 파이프라인이 머지 리퀘스트 파이프라인인 경우 자식 파이프라인은 job이 실행되도록 workflow:rules 또는 rules를 사용해야 합니다.

rules 구성이 누락되거나 잘못되어 자식 파이프라인에서 실행할 수 있는 job이 없는 경우:

  • 자식 파이프라인이 시작되지 않습니다.

  • 부모 파이프라인의 트리거 job이 다음과 같이 실패합니다: downstream pipeline can not be created, the resulting pipeline would have been empty. Review therulesconfiguration.

$ 문자가 포함된 변수가 다운스트림 파이프라인에 제대로 전달되지 않음#

CI/CD 변수를 다운스트림 파이프라인에 전달할 때 CI/CD 변수에서 $ 문자를 이스케이프하기 위해 $$를 사용할 수 없습니다. 다운스트림 파이프라인은 여전히 $를 변수 참조의 시작으로 처리합니다.

UI에서 변수를 구성할 때 CI/CD 변수 확장을 방지하거나 variables:expand 키워드를 사용하여 변수 값이 확장되지 않도록 설정할 수 있습니다. 그러면 이 변수를 다운스트림 파이프라인에 $가 변수 참조로 해석되지 않고 전달할 수 있습니다.

trigger:include 경로의 변수가 비어 있거나 예상과 다른 값을 가짐#

trigger:include 경로에 있는 CI/CD 변수는 트리거 job에서 확장되지 않습니다. 경로는 확장되지 않은 변수가 포함된 문자열로 자식 파이프라인을 생성하는 프로세스에 전달됩니다. 그런 다음 자식 파이프라인의 컨텍스트에서 확장이 이루어집니다.

그 결과 다음과 같이 동작합니다.

  • 파이프라인 구성의 변수는 자식 파이프라인으로 전달되는 경우에만 trigger:include 경로에서 사용할 수 있습니다. 여기에는 기본 variables와 트리거 job 자체의 variables가 포함됩니다. 트리거 job이 yaml_variables: false와 함께 trigger:forward를 사용하면 경로의 변수는 확장될 수 없으며 빈 문자열로 평가됩니다. 프로젝트, 그룹, 인스턴스 CI/CD 변수는 두 컨텍스트 모두에서 사용할 수 있으므로 영향을 받지 않습니다.
  • 사전 정의된 변수는 자식 파이프라인의 값을 가집니다. 예를 들어 $CI_PIPELINE_SOURCE는 자식 파이프라인에서 parent_pipeline이며, 부모 파이프라인의 파이프라인 소스가 아닙니다.
  • 환경으로 범위가 지정된 변수는 자식 파이프라인에 환경이 없으므로 범위가 지정되지 않은 값으로 해석됩니다.

이러한 동작을 피하려면 CI/CD 변수 대신 $[[ inputs.name ]] 보간과 함께 inputs를 사용합니다. 보간은 구성이 처리되기 전에 해석됩니다.

Ref is ambiguous#

같은 이름의 브랜치가 존재할 때 태그로 멀티 프로젝트 파이프라인을 트리거할 수 없습니다. 다운스트림 파이프라인이 downstream pipeline can not be created, Ref is ambiguous라는 오류와 함께 생성에 실패합니다.

브랜치 이름과 일치하지 않는 태그 이름으로만 멀티 프로젝트 파이프라인을 트리거합니다.

트리거 job이 데이터 무결성 실패로 인해 실패함#

이 오류는 job 처리 중 예기치 않은 예외가 발생했음을 나타냅니다. 원인 및 해결 단계는 오류: data integrity failure를 참조합니다.

업스트림 파이프라인에서 job 아티팩트 다운로드 시 403 Forbidden 오류#

CI/CD job 토큰은 파이프라인이 실행되는 프로젝트로 범위가 지정됩니다. 따라서 다운스트림 파이프라인의 job 토큰은 기본적으로 업스트림 프로젝트에 접근하는 데 사용할 수 없습니다.

이 문제를 해결하려면 job 토큰 범위 허용 목록에 다운스트림 프로젝트를 추가합니다.

오류: needs:need pipeline should be a string#

동적 자식 파이프라인과 함께 needs:pipeline:job을 사용할 때 이 오류가 발생할 수 있습니다:

Unable to run pipeline
- jobs:<job_name>:needs:need pipeline should be a string

이 오류는 파이프라인 ID가 문자열 대신 정수로 파싱될 때 발생합니다. 이 문제를 해결하려면 파이프라인 ID를 따옴표로 묶습니다:

rspec:
  needs:
    - pipeline: "$UPSTREAM_PIPELINE_ID"
      job: dependency-job
      artifacts: true

다운스트림 파이프라인 문제 해결

GitLab v19.5
원문 보기

요약

멀티 프로젝트 파이프라인에서 다음과 같은 경우 트리거 job이 실패하고 다운스트림 파이프라인이 생성되지 않습니다: 다운스트림 프로젝트를 찾을 수 없는 경우. 업스트림 파이프라인을 생성하는 사용자가 다운스트림 프로젝트에서 파이프라인을 생성할 권한이 없는 경우.

트리거 job 실패 및 멀티 프로젝트 파이프라인 미생성#

멀티 프로젝트 파이프라인에서 다음과 같은 경우 트리거 job이 실패하고 다운스트림 파이프라인이 생성되지 않습니다:

  • 다운스트림 프로젝트를 찾을 수 없는 경우.

  • 업스트림 파이프라인을 생성하는 사용자가 다운스트림 프로젝트에서 파이프라인을 생성할 권한이 없는 경우.

  • 다운스트림 파이프라인이 보호된 브랜치를 대상으로 하고 사용자가 보호된 브랜치에 대해 파이프라인을 실행할 권한이 없는 경우. 자세한 내용은 보호된 브랜치의 파이프라인 보안을 참조합니다.

다운스트림 프로젝트에서 권한 문제가 있는 사용자를 파악하려면 Rails 콘솔에서 다음 명령을 사용하여 트리거 job을 확인하고 user_id 속성을 살펴볼 수 있습니다.

Ci::Bridge.find(<job_id>)

파이프라인 실행 시 자식 파이프라인의 job이 생성되지 않음#

부모 파이프라인이 머지 리퀘스트 파이프라인인 경우 자식 파이프라인은 job이 실행되도록 workflow:rules 또는 rules를 사용해야 합니다.

rules 구성이 누락되거나 잘못되어 자식 파이프라인에서 실행할 수 있는 job이 없는 경우:

  • 자식 파이프라인이 시작되지 않습니다.

  • 부모 파이프라인의 트리거 job이 다음과 같이 실패합니다: downstream pipeline can not be created, the resulting pipeline would have been empty. Review therulesconfiguration.

$ 문자가 포함된 변수가 다운스트림 파이프라인에 제대로 전달되지 않음#

CI/CD 변수를 다운스트림 파이프라인에 전달할 때 CI/CD 변수에서 $ 문자를 이스케이프하기 위해 $$를 사용할 수 없습니다. 다운스트림 파이프라인은 여전히 $를 변수 참조의 시작으로 처리합니다.

UI에서 변수를 구성할 때 CI/CD 변수 확장을 방지하거나 variables:expand 키워드를 사용하여 변수 값이 확장되지 않도록 설정할 수 있습니다. 그러면 이 변수를 다운스트림 파이프라인에 $가 변수 참조로 해석되지 않고 전달할 수 있습니다.

trigger:include 경로의 변수가 비어 있거나 예상과 다른 값을 가짐#

trigger:include 경로에 있는 CI/CD 변수는 트리거 job에서 확장되지 않습니다. 경로는 확장되지 않은 변수가 포함된 문자열로 자식 파이프라인을 생성하는 프로세스에 전달됩니다. 그런 다음 자식 파이프라인의 컨텍스트에서 확장이 이루어집니다.

그 결과 다음과 같이 동작합니다.

  • 파이프라인 구성의 변수는 자식 파이프라인으로 전달되는 경우에만 trigger:include 경로에서 사용할 수 있습니다. 여기에는 기본 variables와 트리거 job 자체의 variables가 포함됩니다. 트리거 job이 yaml_variables: false와 함께 trigger:forward를 사용하면 경로의 변수는 확장될 수 없으며 빈 문자열로 평가됩니다. 프로젝트, 그룹, 인스턴스 CI/CD 변수는 두 컨텍스트 모두에서 사용할 수 있으므로 영향을 받지 않습니다.
  • 사전 정의된 변수는 자식 파이프라인의 값을 가집니다. 예를 들어 $CI_PIPELINE_SOURCE는 자식 파이프라인에서 parent_pipeline이며, 부모 파이프라인의 파이프라인 소스가 아닙니다.
  • 환경으로 범위가 지정된 변수는 자식 파이프라인에 환경이 없으므로 범위가 지정되지 않은 값으로 해석됩니다.

이러한 동작을 피하려면 CI/CD 변수 대신 $[[ inputs.name ]] 보간과 함께 inputs를 사용합니다. 보간은 구성이 처리되기 전에 해석됩니다.

Ref is ambiguous#

같은 이름의 브랜치가 존재할 때 태그로 멀티 프로젝트 파이프라인을 트리거할 수 없습니다. 다운스트림 파이프라인이 downstream pipeline can not be created, Ref is ambiguous라는 오류와 함께 생성에 실패합니다.

브랜치 이름과 일치하지 않는 태그 이름으로만 멀티 프로젝트 파이프라인을 트리거합니다.

트리거 job이 데이터 무결성 실패로 인해 실패함#

이 오류는 job 처리 중 예기치 않은 예외가 발생했음을 나타냅니다. 원인 및 해결 단계는 오류: data integrity failure를 참조합니다.

업스트림 파이프라인에서 job 아티팩트 다운로드 시 403 Forbidden 오류#

CI/CD job 토큰은 파이프라인이 실행되는 프로젝트로 범위가 지정됩니다. 따라서 다운스트림 파이프라인의 job 토큰은 기본적으로 업스트림 프로젝트에 접근하는 데 사용할 수 없습니다.

이 문제를 해결하려면 job 토큰 범위 허용 목록에 다운스트림 프로젝트를 추가합니다.

오류: needs:need pipeline should be a string#

동적 자식 파이프라인과 함께 needs:pipeline:job을 사용할 때 이 오류가 발생할 수 있습니다:

Unable to run pipeline
- jobs:<job_name>:needs:need pipeline should be a string

이 오류는 파이프라인 ID가 문자열 대신 정수로 파싱될 때 발생합니다. 이 문제를 해결하려면 파이프라인 ID를 따옴표로 묶습니다:

rspec:
  needs:
    - pipeline: "$UPSTREAM_PIPELINE_ID"
      job: dependency-job
      artifacts: true