하나의 파이프라인을 차례로 트리거

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

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

이와 같은 상황에서는 트리거 파이프라인이 성공적으로 완료되면 파이프라인 트리거를 추가하여 파이프라인실행합니다.

참고 항목

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

파이프라인 리소스 트리거 구성

다른 파이프라인이 완료될 때 파이프라인을 트리거하려면 파이프라인 리소스 트리거를 구성합니다.

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

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

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

    # security-lib-ci YAML pipeline
    steps:
    - bash: echo "The security-lib-ci pipeline runs first"
    
  • app-ci - 이 파이프라인에는 파이프라인 실행이 완료할 때마다 자동으로 실행되도록 파이프라인을 구성하는 app-ci 파이프라인 리소스 트리거가 security-lib-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 - 원본 파이프라인의 모든 버전이 완료되면 이 구문을 사용하여 파이프라인을 트리거합니다. 실행을 트리거할 원본 파이프라인 완료 버전을 필터링하는 방법을 알아보려면 이 문서의 다음 섹션을 참조하세요. 필터를 지정하면 원본 파이프라인 실행이 모든 필터와 일치하여 실행을 트리거해야 합니다.

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

참고 항목

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

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

분기 필터

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

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

부모가 트리거되는 다른 분기에 대해 자식 파이프라인을 트리거하려면 부모가 트리거되는 모든 분기 필터를 포함합니다. 다음 예제 app-ci 에서는 분기 또는 기본 분기releases/old*에서 releases/* 완료되는 경우 security-lib-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 파이프라인이 수동으로 트리거되거나 예약된 트리거에 의해 트리거될 때 아티팩트를 검색하기 위해 실행할 파이프라인을 결정하는 데 사용됩니다. 자세한 내용은 리소스: 파이프라인 및 아티팩트 버전 평가를 참조하세요.

스테이징 필터

필터를 사용하여 트리거 파이프라인의 하나 이상의 단계가 완료되면 파이프라인을 트리거할 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 트리거의 필터와 일치하는 푸시가 수행될 때마다 새 실행이 시작되고 파이프라인 완료 트리거의 필터와 일치하는 원본 파이프라인 실행이 완료될 것으로 예상할 수 있습니다.

예를 들어 이름이 지정 A 되고 B 동일한 리포지토리에 있는 두 개의 파이프라인에 CI 트리거가 있고 B 파이프라인 완료를 위해 구성된 파이프라인 A완료 트리거를 사용하는 것이 좋습니다. 리포지토리에 푸시하는 경우:

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

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