다음을 통해 공유


파이프라인을 순차적으로 실행

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

대형 제품에는 서로 종속된 여러 구성 요소가 있습니다. 이러한 구성 요소는 종종 독립적으로 빌드됩니다. 업스트림 구성 요소(예: 라이브러리)가 변경되면 다운스트림 종속성을 다시 빌드하고 유효성을 다시 검사해야 합니다.

이와 같은 상황에서는, 파이프라인 가 성공적으로 완료될 때파이프라인을 실행하도록 파이프라인 트리거를 추가하세요.

메모

이전에 YAML 파이프라인을 위한 클래식 편집기로 이동했을 가능성이 있으며, UI에서 빌드 완료 트리거를 구성했을 수 있습니다. 해당 모델은 여전히 작동하지만 더 이상 권장되지 않습니다. 권장되는 방법은 파이프라인 트리거를 YAML 파일 내에서 직접로 지정하는 것입니다. 클래식 편집기에서 정의된 빌드 완료 트리거에는 파이프라인 트리거에서 해결된 다양한 단점이 있습니다. 예를 들어 빌드 완료 트리거를 사용하여 트리거 파이프라인과 동일한 분기에서 파이프라인을 트리거할 수 있는 방법은 없습니다.

파이프라인 설정 UI를 사용하여 정의된 트리거가 YAML 트리거보다 우선합니다. YAML 파이프라인에서 UI 예약 트리거를 삭제하려면 UI 설정이YAML 예약 트리거 재정의를 참조하세요.

파이프라인 리소스 트리거 설정

다른 파이프라인이 완료된 후에 파이프라인을 트리거하려면, 파이프라인 리소스 트리거를 구성하세요.

다음 예제에서는 security-lib-ci 파이프라인의 실행이 완료된 후 app-ci 파이프라인이 실행되도록 파이프라인 리소스 트리거를 구성합니다.

이 예제에는 다음 두 개의 파이프라인이 있습니다.

  • security-lib-ci - 이 파이프라인이 먼저 실행됩니다.

    # security-lib-ci YAML pipeline
    steps:
    - bash: echo "The security-lib-ci pipeline runs first"
    
  • app-ci - 이 파이프라인에는 security-lib-ci 파이프라인의 실행이 완료할 때마다 자동으로 실행되도록 app-ci 파이프라인을 구성하는 파이프라인 리소스 트리거가 있습니다.

    # app-ci YAML pipeline
    # We are setting up a pipeline resource that references the security-lib-ci
    # pipeline and setting up a pipeline completion trigger so that our app-ci
    # pipeline runs when a run of the security-lib-ci pipeline completes
    resources:
      pipelines:
      - pipeline: securitylib # Name of the pipeline resource.
        source: security-lib-ci # The name of the pipeline referenced by this pipeline resource.
        project: FabrikamProject # Required only if the source pipeline is in another project
        trigger: true # Run app-ci pipeline when any run of security-lib-ci completes
    
    steps:
    - bash: echo "app-ci runs after security-lib-ci completes"
    
  • - pipeline: securitylib 파이프라인 리소스의 이름을 지정합니다. 파이프라인 리소스 변수를 사용하거나 아티팩트 다운로드와 같이 파이프라인의 다른 부분에서 파이프라인 리소스를 참조할 때 여기에 정의된 레이블을 사용합니다.
  • source: security-lib-ci 이 파이프라인 리소스에서 참조하는 파이프라인의 이름을 지정합니다. Azure DevOps 포털에서 파이프라인의 이름을 여러 위치에서 검색할 수 있습니다. 예를 들어, 파이프라인 랜딩 페이지같은 곳입니다. 기본적으로 파이프라인의 이름은 파이프라인을 포함하는 리포지토리의 이름을 따서 지정됩니다. 파이프라인 이름을 업데이트하려면 파이프라인 설정참조하세요. 파이프라인이 폴더에 포함된 경우 앞에 오는 \포함하여 폴더 이름을 포함합니다(예: \security pipelines\security-lib-ci).
  • project: FabrikamProject - 트리거 파이프라인이 다른 Azure DevOps 프로젝트에 있는 경우 프로젝트 이름을 지정해야 합니다. 원본 파이프라인과 트리거된 파이프라인이 모두 동일한 프로젝트에 있는 경우 이 속성은 선택 사항입니다. 이 값을 지정하고 파이프라인이 트리거되지 않는 경우 이 섹션의 끝에 있는 참고 사항을 참조하세요.
  • trigger: true - 원본 파이프라인의 모든 버전이 완료되면 이 구문을 사용하여 파이프라인을 트리거합니다. 실행을 트리거할 원본 파이프라인 완료 버전을 필터링하는 방법을 알아보려면 이 문서의 다음 섹션을 참조하세요. 필터를 지정하면 원본 파이프라인 실행이 모든 필터와 일치하여 실행을 트리거해야 합니다.

트리거 파이프라인과 트리거된 파이프라인이 동일한 리포지토리를 사용하는 경우 두 파이프라인은 서로 트리거할 때 동일한 커밋을 사용하여 실행됩니다. 이는 첫 번째 파이프라인이 코드를 빌드하고 두 번째 파이프라인에서 테스트하는 경우에 유용합니다. 그러나 두 파이프라인이 서로 다른 리포지토리를 사용하는 경우 트리거된 파이프라인은파이프라인 완료 트리거에 대한 분기 고려 사항에 설명된 대로 설정에 지정된 분기의 코드 버전을 사용합니다.

메모

일부 시나리오에서는 수동 빌드 및 예약된 빌드의 기본 분기에는 refs/heads 접두사가 포함되지 않습니다. 예를 들어 기본 분기는 refs/heads/main대신 main으로 설정될 수 있습니다. 이 시나리오에서는 다른 프로젝트의 트리거 이 작동하지 않습니다. project 대상 파이프라인 이외의 값으로 설정할 때 문제가 발생하는 경우 해당 값을 다른 분기로 변경한 다음 다시 사용하려는 기본 분기로 변경하여 refs/heads 포함하도록 기본 분기를 업데이트할 수 있습니다.

YAML 템플릿에서는 파이프라인 완료 트리거 구성이 지원되지 않습니다. 템플릿에서 파이프라인 리소스를 정의할 수 있습니다.

브랜치 필터

선택적으로 트리거를 구성할 때 포함하거나 제외할 분기를 지정할 수 있습니다. 분기 필터를 지정하면 분기 필터와 일치하는 원본 파이프라인 실행이 성공적으로 완료될 때마다 새 파이프라인이 트리거됩니다. 다음 예제에서는 releases/old*제외한 모든 releases/* 분기에서 security-lib-ci 완료되면 app-ci 파이프라인이 실행됩니다.

# app-ci YAML pipeline
resources:
  pipelines:
  - pipeline: securitylib
    source: security-lib-ci
    trigger: 
      branches:
        include: 
        - releases/*
        exclude:
        - releases/old*

부모가 트리거되는 다른 분기에 대해 자식 파이프라인을 트리거하려면 부모가 트리거되는 모든 분기 필터를 포함합니다. 다음 예제에서는 releases/old*을 제외한 모든 releases/* 분기 또는 메인 분기에서 security-lib-ci이 완료되면 app-ci 파이프라인이 실행됩니다.

# app-ci YAML pipeline
resources:
  pipelines:
  - pipeline: securitylib
    source: security-lib-ci
    trigger: 
      branches:
        include: 
        - releases/*
        - main
        exclude:
        - releases/old*

메모

분기 필터가 작동하지 않는 경우 접두사 refs/heads/사용해 보세요. 예를 들어 releases/old*대신 refs/heads/releases/old*사용합니다.

태그 필터

메모

파이프라인 리소스에 대한 태그 필터 지원을 사용하려면 Azure DevOps Server 2020 업데이트 1 이상 필요합니다.

tags 속성은 파이프라인 완료 이벤트가 파이프라인을 트리거할 수 있는지를 결정하는 trigger 필터입니다. 트리거 파이프라인이 tags 목록의 모든 태그와 일치하면 파이프라인이 실행됩니다.

resources:
  pipelines:
  - pipeline: MyCIAlias
    source: Farbrikam-CI
    trigger:
      tags:        # This filter is used for triggering the pipeline run
      - Production # Tags are AND'ed
      - Signed

메모

파이프라인 리소스에는 tags 속성도 있습니다. 파이프라인 리소스의 tags 속성은 파이프라인이 수동으로 또는 예약된 트리거에 의해 트리거될 때 아티팩트를 검색하기 위해 실행할 파이프라인을 결정하는 데 사용됩니다. 자세한 내용은 리소스: 파이프라인 및 아티팩트 버전 평가를 참조하세요.

단계 필터

메모

파이프라인 리소스 트리거에 대한 단계 필터 Azure DevOps Server 2020 업데이트 1 이상에 필요합니다.

stages 필터를 사용하여 트리거링 파이프라인의 하나 이상의 단계가 완료되면 파이프라인을 시작할 수 있습니다. 여러 단계를 제공하는 경우 나열된 모든 단계가 완료되면 트리거된 파이프라인이 실행됩니다.

resources:
  pipelines:
  - pipeline: MyCIAlias  
    source: Farbrikam-CI  
    trigger:    
      stages:         # This stage filter is used when evaluating conditions for 
      - PreProduction # triggering your pipeline. On successful completion of all the stages
      - Production    # provided, your pipeline will be triggered. 

분기 고려 사항

파이프라인 완료 트리거는 수동 및 예약된 빌드 설정에 기본 분기를 사용하여 다른 파이프라인 완료의 결과로 파이프라인을 실행할지 여부를 결정할 때 평가할 YAML 파이프라인의 분기 필터 버전을 결정합니다. 기본적으로 이 설정은 리포지토리의 기본 분기를 가리킵니다.

파이프라인이 완료되면 Azure DevOps 런타임은 완료된 파이프라인을 참조하는 파이프라인 완료 트리거가 있는 모든 파이프라인의 리소스 트리거 분기 필터를 평가합니다. 파이프라인은 서로 다른 분기에 여러 버전을 가질 수 있으므로 런타임은 Default branch for manual and scheduled builds 설정으로 지정된 분기의 파이프라인 버전에서 분기 필터를 평가합니다. 일치하는 항목이 있는 경우 파이프라인이 실행되지만 실행 중인 파이프라인의 버전은 트리거된 파이프라인이 완료된 파이프라인과 동일한 리포지토리에 있는지 여부에 따라 다른 분기에 있을 수 있습니다.

  • 두 파이프라인이 서로 다른 리포지토리에 있는 경우, Default branch for manual and scheduled builds에 지정된 분기의 트리거된 파이프라인 버전이 실행됩니다.
  • 두 파이프라인이 동일한 리포지토리에 있는 경우, 트리거 파이프라인과 동일한 브랜치의 트리거된 파이프라인 버전이 실행됩니다 (트리거 조건이 충족될 때 해당 브랜치의 파이프라인 버전을 사용합니다). 이때, 해당 브랜치가 Default branch for manual and scheduled builds와 다르더라도, 그리고 해당 버전이 완료된 파이프라인의 브랜치와 일치하는 브랜치 필터가 없어도 마찬가지입니다. 이는 Default branch for manual and scheduled builds 분기의 분기 필터를 사용하여 완료된 파이프라인 분기에 있는 버전의 분기 필터가 아니라 파이프라인이 실행되어야 하는지 여부를 결정하기 때문입니다.

파이프라인 완료 트리거가 작동하지 않는다면, 트리거된 파이프라인의 수동 및 예약된 빌드를 위한 기본 분기 설정 값을 확인하세요. 해당 분기 버전의 파이프라인에 있는 분기 필터는 파이프라인 완료 트리거가 파이프라인 실행을 시작하는지 여부를 결정하는 데 사용됩니다. 기본적으로 Default branch for manual and scheduled builds 리포지토리의 기본 분기로 설정되지만 파이프라인을 만든 후에 변경할 수 있습니다.

파이프라인 완료 트리거가 실행되지 않는 일반적인 시나리오는 새 브랜치를 생성하고, 파이프라인 완료 트리거 브랜치 필터를 수정하여 이 새로운 브랜치를 포함시키지만, 이 새로운 브랜치 필터와 일치하는 브랜치에서 첫 번째 파이프라인이 완료되었을 때 두 번째 파이프라인이 트리거되지 않는 경우입니다. 이 문제는 Default branch for manual and scheduled builds 분기의 파이프라인 버전에서 분기 필터가 새 분기와 일치하지 않는 경우에 발생합니다. 이 트리거 문제를 해결하려면 다음 두 가지 옵션이 있습니다.

  • 새 분기와 일치하도록 Default branch for manual and scheduled builds 분기의 파이프라인에서 분기 필터를 업데이트하세요.
  • 수동 및 예약된 빌드 설정을 위해 기본 분기를 신규 분기와 일치하는 분기 필터를 포함한 파이프라인 버전이 있는 분기로 업데이트합니다.

트리거 유형 결합

파이프라인에서 CI 트리거와 파이프라인 트리거를 모두 지정하면 CI 트리거의 필터와 일치하는 푸시가 수행될 때마다 새 실행이 시작되고 파이프라인 완료 트리거의 필터와 일치하는 원본 파이프라인 실행이 완료될 것으로 예상할 수 있습니다.

예를 들어, 동일한 리포지토리에 있는 AB이라는 두 개의 파이프라인은 모두 CI 트리거가 있으며, B는 파이프라인 A의 완료를 위한 파이프라인 완료 트리거로 설정되어 있습니다. 리포지토리에 푸시하는 경우:

  • CI 트리거에 기반하여 A의 새로운 실행이 시작됩니다.
  • 동시에 CI 트리거에 따라 B 새 실행이 시작됩니다. 이 실행은 파이프라인 A이전 실행의 아티팩트를 사용합니다.
  • A가 완료되면, B의 파이프라인 완료 트리거에 따라 B이 또 다른 실행을 시작합니다.

이 예제에서 두 번의 B 실행을 트리거하지 않으려면 CI 트리거(trigger: none) 또는 파이프라인 트리거(pr: none)를 사용하지 않도록 설정해야 합니다.