트리거를 사용하여 파이프라인이 실행되는 시점 제어

완료됨

이제 Azure 환경에 Bicep 파일을 배포하는 작업 파이프라인이 있습니다. 그러나 파일을 변경할 때마다 파이프라인을 수동으로 실행해야 합니다. 이 단원에서는 Bicep 코드가 변경될 때마다 파이프라인이 자동으로 실행되도록 트리거하는 방법을 알아봅니다.

참고

이 단원의 명령은 개념을 설명하기 위해 표시된 것입니다. 명령을 아직 실행하지 마세요. 여기에서 학습하는 내용을 곧 연습할 예정입니다.

파이프라인 트리거란?

파이프라인 트리거는 충족될 경우 사용자가 만든 규칙에 따라 파이프라인을 자동으로 실행하는 조건입니다. 예약된 간격으로 파이프라인을 실행하도록 설정할 수 있습니다. 리포지토리의 파일이 변경될 때마다 파이프라인을 실행하도록 트리거를 구성할 수도 있습니다. 누군가가 코드를 변경할 때마다 모든 테스트와 배포 단계를 실행하는 것이 좋으므로 두 번째 옵션을 선택할 수 있습니다.

자동 트리거를 사용하지 않는 경우 누군가 Bicep 파일을 변경하고 커밋하여 리포지토리에 푸시할 수도 있습니다. 하지만 파이프라인을 실행하는 것을 잊어버린 경우에는 Bicep 파일의 리소스 정의와 Azure 환경에 배포된 리소스 간에 차이가 있습니다. 몇 개의 커밋 및 푸시가 수행되었지만 배포되지 않은 것으로 가정합니다. 이러한 변경 중 하나에서 Bicep 파일에 오류 또는 잘못된 구성을 제공하는 경우 나중에 한 번에 배포되는 여러 커밋에서 오류를 추적하는 것이 어려울 수 있습니다. 시간이 지나면 Bicep 코드가 인프라를 실제로 나타낸다는 것을 신뢰하지 않을 것이고, 그 값이 훼손될 것입니다.

파일을 업데이트할 때마다 실행하도록 파이프라인을 설정하면 변경 내용이 푸시되는 순간 파이프라인이 실행되기 시작합니다. 변경의 유효성에 대한 즉각적인 피드백을 얻고 프로덕션 환경이 항상 최신 상태임을 확신할 수 있습니다.

분기 트리거

일반적인 유형의 트리거는 분기 트리거, 연속 통합 트리거 또는 CI 트리거라고도 합니다. 분기 트리거를 사용하면 지정된 분기를 변경할 때마다 파이프라인이 실행됩니다. 변경 내용을 다른 분기에 커밋하고 푸시하는 경우 파이프라인은 이를 무시하여 실행되지 않습니다. 다음 코드를 사용하여 기본 또는 main 분기에 대해 이 유형의 트리거를 사용하는 것이 일반적입니다.

trigger:
- main

여러 분기가 변경되었을 때 트리거

특정 분기 또는 분기 집합에서 파이프라인을 실행하도록 트리거를 설정할 수 있습니다. 예를 들어 프로젝트의 특정 릴리스에 대해 배포할 코드가 포함된 릴리스 분기를 만든다고 가정하겠습니다. release/v1, release/v2 등과 같은 분기 이름을 사용할 수 있습니다. 이름이 release/로 시작하는 분기에서 코드가 변경될 때마다 파이프라인을 실행하려고 합니다. include 속성은 * 와일드 카드와 함께 사용할 수 있습니다.

trigger:
  branches:
    include:
    - main
    - release/*

특정 분기를 제외할 수도 있습니다. 프로젝트에서 팀 구성원과 공동 작업을 하고 있다고 가정하겠습니다. 동료는 Bicep 파일에서 아이디어를 시험하기 위해 기능 분기를 만듭니다. 모든 기능 분기는 feature/add-database, feature/improve-performance 등과 같은 이름이 지정됩니다. 동료가 만드는 기능 분기를 제외한 모든 분기에서 파이프라인을 자동으로 실행하려고 합니다. exclude 속성을 사용하면 파이프라인이 기능 분기의 변경에 대해 자동으로 트리거되지 않게 할 수 있습니다.

trigger:
  branches:
    include:
    - '*'
    exclude:
    - feature/*

include 필터에서 와일드카드 주위의 작은따옴표에 주목하세요. YAML 파일 형식을 사용하는 경우 단일 * 문자를 와일드 카드로 사용하는 경우 작은따옴표로 묶어야 합니다.

패스 필터

리포지토리에 배포와 관련이 없는 파일이 있는 경우도 있습니다. 예를 들어 리포지토리에 Bicep 코드가 포함된 deploy 폴더와 설명서 파일이 포함된 별도의 docs 폴더가 있을 수 있습니다. 누군가가 deploy 폴더에서 Bicep 파일을 변경할 경우에는 파이프라인을 트리거하고, 설명서 파일만 변경하는 경우에는 파이프라인을 트리거하지 않고자 할 수 있습니다. 리포지토리에서 특정 폴더의 변경 내용에 응답하도록 트리거를 설정하려면 경로 필터를 사용할 수 있습니다.

trigger:
  branches:
    include:
    - main
  paths:
    exclude:
    - docs
    include:
    - deploy

누군가 설명서 파일만 업데이트하는 변경 내용을 커밋하는 경우 파이프라인은 실행되지 않습니다. 그러나 Bicep 파일을 변경하거나 설명서 파일과 Bicep 파일을 변경하는 경우에는 트리거가 파이프라인을 실행합니다.

파이프라인이 자동으로 실행되도록 일정 예약

파일 변경에 대한 응답이 아니라 설정된 일정에 따라 파이프라인을 실행할 수 있습니다. 예를 들어 Bicep 코드의 야간 릴리스를 실행하거나 매일 아침마다 테스트 환경을 자동으로 배포할 수 있습니다. trigger 대신 schedules 키워드를 사용하고 cron 식을 사용하여 빈도를 설정합니다.

schedules:
- cron: "0 0 * * *"
  displayName: Daily environment restore
  branches:
    include:
    - main

참고

cron 식은 이벤트 발생 빈도를 설정하는 특수 형식의 문자 시퀀스입니다. 이 예제에서 0 0 * * *매일 자정(UTC)에 실행을 의미합니다.

예약된 이벤트에서 사용할 리포지토리의 분기를 설정할 수도 있습니다. 파이프라인은 시작하면 일정에 설정된 분기에서 최신 버전의 코드를 사용합니다.

다중 트리거 사용

다음 예제와 같이 트리거와 일정을 결합할 수 있습니다.

trigger:
- main

schedules:
- cron: "0 0 * * *"
  displayName: Deploy test environment
  branches:
    include:
    - main

동일한 파이프라인에서 분기 트리거 및 예약된 트리거를 만들면 트리거에서 설정된 분기에서 파일이 변경될 때마다 그리고 사용자가 설정한 일정에 따라 파이프라인이 실행됩니다. 이 예제에서 파이프라인은 매일 자정(UTC)과 main 분기에 변경 내용이 푸시될 때마다 실행됩니다.

각 파이프라인에 대해 트리거를 설정하는 것이 좋습니다. 트리거를 설정하지 않으면 기본값으로 모든 분기에서 파일이 변경될 때마다 자동으로 파이프라인이 실행되는데 이는 필요하지 않은 경우가 많습니다.

동시성 제어

기본적으로 Azure Pipelines를 사용하면 여러 인스턴스의 파이프라인을 동시에 실행할 수 있습니다. 이는 짧은 시간 내에 한 분기에 여러 커밋을 수행하는 경우에 발생할 수 있습니다.

일부 상황에서는 파이프라인의 동시 실행이 여러 개 있는 것이 문제가 되지 않습니다. 그러나 배포 파이프라인을 사용하는 경우 파이프라인 실행이 예상하지 않은 방식으로 Azure 리소스 또는 구성을 덮어쓰지 않도록 하는 것이 어려울 수 있습니다.

이러한 문제를 방지하기 위해 다음 예제와 같이 트리거와 함께 batch 키워드를 사용할 수 있습니다.

trigger:
  batch: true
  branches:
    include:
    - main

트리거가 실행되면 Azure Pipelines는 활성 파이프라인 실행이 완료될 때까지 기다립니다. 그런 다음, 마지막 실행 이후 누적된 모든 변경 내용으로 새 실행을 시작합니다.