파이프라인 템플릿을 사용하여 환경 간 유사성 처리

완료됨

여러 환경에 변경 내용을 배포하는 경우 각 환경에 배포하는 단계는 비슷하거나 동일합니다. 본 단원에서는 파이프라인 템플릿을 사용하여 반복을 방지하고 파이프라인 코드를 재사용할 수 있도록 하는 방법을 알아봅니다.

여러 환경에 배포

웹 사이트 팀의 동료와 이야기한 후, 완구 회사의 웹 사이트에 대해 다음 파이프라인을 결정합니다.

Diagram that shows a series of pipeline stages that include test and production deployments.

  1. 파이프라인은 Bicep Linter를 실행하여 Bicep 코드가 올바른지 확인하고 모범 사례를 따릅니다.

    린팅은 Azure에 연결할 필요 없이 Bicep 코드에서 발생하므로 배포하는 환경의 수는 상관이 없습니다. 한 번만 실행됩니다.

  2. 파이프라인이 테스트 환경에 배포됩니다. 이 단계에는 다음이 필요합니다.

    1. Azure Resource Manager 실행 전 유효성 검사를 실행합니다.
    2. Bicep 코드를 배포합니다.
    3. 테스트 환경에 대한 테스트를 실행합니다.
  3. 파이프라인 일부가 실패하면 전체 파이프라인이 중지되므로 문제를 조사하고 해결할 수 있습니다. 그러나 모든 것이 성공하면 파이프라인이 계속해서 프로덕션 환경에 배포됩니다.

    1. 파이프라인이 프리뷰 스테이지를 실행하고 프로덕션 환경에서 가상 작업이 실행되어 프로덕션 Azure 리소스에 적용되는 변경 내용이 나열됩니다. 또한 프리뷰 스테이지는 배포의 유효성을 검사하므로 프로덕션 환경에 대해 별도의 유효성 검사 단계를 실행할 필요가 없습니다.
    2. 수동 유효성 검사를 위해 파이프라인이 일시 중지됩니다.
    3. 승인이 수신되면 파이프라인은 프로덕션 환경에 대한 배포 및 스모크 테스트를 실행합니다.

이러한 단계 중 일부는 테스트 환경과 프로덕션 환경 간에 반복되며 일부는 특정 환경에 대해서만 실행됩니다.

단계 환경
린트 둘 다 아님 - 린팅이 어느 환경에 대해서도 작동하지 않습니다.
유효성 검사 테스트에서만
미리 보기 프로덕션에서만
배포 두 환경 모두
스모크 테스트 두 환경 모두

파이프라인의 단계를 반복해야 하는 경우 단계 정의를 복사하여 붙여 넣기를 시도할 수 있습니다. 그러나 이러한 관행을 피하는 것이 가장 좋습니다. 실수로 사소한 실수가 발생하거나 파이프라인 코드를 복제할 때 동기화되지 않을 수 있습니다. 그리고 나중에 단계를 변경해야 하는 경우에는 변경 내용을 여러 위치에 적용해야 합니다.

파이프라인 템플릿

‘파이프라인 템플릿’을 사용하면 재사용 가능한 파이프라인 정의 섹션을 만들 수 있습니다. 템플릿은 단계, 작업 또는 전체 단계를 정의할 수 있습니다. 템플릿을 사용하여 한 개의 파이프라인 또는 여러 파이프라인에서 파이프라인의 일부를 여러 번 재사용할 수 있습니다. 여러 파이프라인에서 재사용하려는 변수 집합에 대한 템플릿을 만들 수도 있습니다.

템플릿은 단순히 재사용 가능한 콘텐츠를 포함하는 YAML 파일입니다. 단계 정의에 대한 간단한 템플릿은 다음과 같이 표시되고 ‘script.yml’이라는 파일에 저장됩니다.

steps:
- script: |
    echo Hello world!

일반적으로 개별 단계를 정의하는 위치에서 template 키워드를 사용하여 파이프라인에서 템플릿을 사용할 수 있습니다.

jobs:
- job: Job1
  pool:
    vmImage: 'windows-latest'
  steps:
  - template: script.yml

- job: Job2
  pool:
    vmImage: 'ubuntu-latest'
  steps:
  - template: script.yml

중첩된 템플릿

다른 템플릿에서 템플릿을 중첩할 수도 있습니다. 이전 파일의 이름이 ‘jobs.yml’이며 여러 파이프라인 단계에서 작업 템플릿을 재사용하는 ‘azure-pipelines.yml’이라는 파일을 만든다고 가정해 보겠습니다.

trigger:
  branches:
    include:
    - main

pool:
  vmImage: ubuntu-latest

stages:

- stage: Stage1
  jobs:
  - template: jobs.yml

- stage: Stage2
  jobs:
  - template: jobs.yml

템플릿을 중첩하거나 단일 파이프라인에서 여러 번 재사용 하는 경우 여러 파이프라인 리소스에 대해 실수로 동일한 이름을 사용하지 않도록 주의해야 합니다. 예를 들어 단계 내 각 작업마다 고유한 식별자가 필요합니다. 따라서 템플릿에서 작업 식별자를 정의하는 경우 동일한 단계에서 여러 번 재사용할 수 없습니다.

복잡한 배포 파이프라인 집합을 사용하는 경우 공유 파이프라인 템플릿에 대한 전용 Git 리포지토리를 만드는 것이 유용할 수 있습니다. 그러면 여러 프로젝트를 위한 여러 파이프라인인 경우에도 동일한 재사용할 수 있습니다. 요약에서 자세한 정보에 대한 링크가 제공됩니다.

파이프라인 템플릿 매개 변수

‘파이프라인 템플릿 매개 변수’를 사용하면 템플릿을 사용할 때마다 약간의 차이를 허용하기 때문에 템플릿 파일을 더 쉽게 재사용할 수 있습니다.

파이프라인 템플릿을 만들 때 파일 상단에 해당 매개 변수를 표시할 수 있습니다.

parameters: 
- name: environmentType
  type: string
  default: 'Test'
- name: serviceConnectionName
  type: string

필요한 수만큼 매개 변수를 정의할 수 있습니다. 하지만 Bicep 매개 변수와 마찬가지로 파이프라인 템플릿 매개 변수를 과도하게 사용해서는 안 됩니다. 너무 많은 설정을 지정하지 않고도 다른 사람이 템플릿을 쉽게 재사용할 수 있도록 해야 합니다.

각 파이프라인 템플릿 매개 변수에는 세 가지 속성이 있습니다.

  • 템플릿 파일의 매개 변수를 참조하는 데 사용하는 매개 변수의 ‘이름’
  • 매개 변수의 ‘형식’. 매개 변수는 ‘문자열’, ‘숫자’, ‘부울’을 비롯 한 여러 가지 유형의 데이터를 지원합니다. 구조화된 개체를 허용하는 더 복잡한 템플릿을 정의할 수도 있습니다.
  • 매개 변수의 기본값은 선택 사항입니다. 기본값을 지정하지 않으면 파이프라인 템플릿이 사용될 때 값을 입력해야 합니다.

예시에서 파이프라인은 기본값이 Test인 문자열 매개 변수 environmentType과 이름이 serviceConnectionName인 필수 매개 변수를 정의합니다.

파이프라인 템플릿에서 특수 구문을 사용하여 매개 변수의 값을 참조합니다. 다음 예제와 같이 ${{parameters.YOUR_PARAMETER_NAME}} 매크로를 사용합니다.

steps:
- script: |
    echo Hello ${{parameters.environmentType}}!

다음 예제와 같이 parameters 키워드를 사용하여 매개 변수의 값을 파이프라인 템플릿에 전달합니다.

steps:
- template: script.yml
  parameters:
    environmentType: Test

- template: script.yml
  parameters: 
    environmentType: Production

파이프라인 템플릿의 작업 및 단계에 식별자를 할당할 때에도 매개 변수를 사용할 수 있습니다. 이 기법은 다음과 같이 파이프라인에서 동일한 템플릿을 여러 번 재사용해야 하는 경우에 유용합니다.

parameters:
- name: environmentType
  type: string
  default: 'Test'

jobs:
- job: Job1-${{parameters.environmentType}}
  pool:
    vmImage: 'windows-latest'
  steps:
  - template: script.yml

- job: Job2-${{parameters.environmentType}}
  pool:
    vmImage: 'ubuntu-latest'
  steps:
  - template: script.yml

조건

파이프라인 ‘조건’을 사용하여 지정한 규칙에 따라 단계, 작업 또는 스테이지를 실행해야 하는지 지정할 수 있습니다. 템플릿 매개 변수와 파이프라인 조건을 결합하여 다양한 상황에 대한 배포 프로세스를 사용자 지정할 수 있습니다.

예를 들어 스크립트 단계를 실행하는 파이프라인 템플릿을 정의한다고 가정해 보겠습니다. 각 환경에 대한 템플릿을 재사용하려고 합니다. 프로덕션 환경을 배포할 때 기타 단계를 실행하려고 합니다. if 매크로와 eq(‘같음’) 연산자를 사용하여 얻을 수 있는 것은 다음과 같습니다.

parameters: 
- name: environmentType
  type: string
  default: 'Test'

steps:
- script: |
    echo Hello ${{parameters.environmentType}}!

- ${{ if eq(parameters.environmentType, 'Production') }}:
  - script: |
      echo This step only runs for production deployments.

이 조건은 environmentType 매개 변수의 값이 'Production'과 같은 경우 다음 단계를 실행한다는 것을 의미합니다.

예제와 같은 조건을 사용할 때는 YAML 파일의 들여쓰기에 주의해야 합니다. 조건이 적용되는 단계를 한 수준 더 들여쓰기해야 합니다.

스테이지, 작업 또는 단계에서 condition 속성을 지정할 수도 있습니다. 다음은 ne(같지 않음) 연산자를 사용하여 environmentType 매개 변수의 값이 'Production'과 같지 않은 경우 다음 단계를 실행한다는 것과 같은 조건을 지정하는 방법을 보여주는 예제입니다.

- script: |
    echo This step only runs for non-production deployments.
  condition: ne('${{ parameters.environmentType }}', 'Production')

조건을 통해 파이프라인에 유연성을 추가할 수 있지만 너무 많이 사용하지 마십시오. 파이프라인이 복잡해지고 흐름을 이해하기 어려워집니다. 파이프라인 템플릿에 조건이 많은 경우 템플릿이 실행하려는 워크플로에 대한 최상의 솔루션이 아닐 수 있으며 파이프라인을 다시 설계해야 할 수도 있습니다.

또한 YAML 주석을 사용하여 사용하는 조건과 추가적인 설명이 필요할 수 있는 파이프라인의 다른 측면을 설명하는 것이 좋습니다. 주석을 사용하면 나중에 파이프라인을 쉽게 이해하고 사용할 수 있습니다. 이 모듈 전체의 연습에 예제 YAML 설명이 있습니다.