다음을 통해 공유


템플릿 매개 변수

템플릿에서 매개 변수 및 해당 데이터 형식을 지정하고 파이프라인에서 해당 매개 변수를 참조할 수 있습니다. templateContext를 사용하면 템플릿에서 매개 변수로 사용되는 단계, 단계 및 작업에 속성을 전달할 수도 있습니다.

템플릿 외부에서 매개 변수를 사용할 수도 있습니다. 매개 변수 기본값에 대해서만 리터럴을 사용할 수 있습니다. YAML 스키마의 매개 변수에 대해 자세히 알아봅니다.

매개 변수 전달

매개 변수는 이름 및 데이터 형식을 포함해야 합니다. 에서 azure-pipelines.yml매개 변수 yesNo 를 부울 값으로 설정하면 빌드가 성공합니다. yesNoapples 같은 문자열로 설정되면, 빌드가 실패합니다.

# File: simple-param.yml
parameters:
- name: yesNo # name of the parameter; required
  type: boolean # data type of the parameter; required
  default: false

steps:
- script: echo ${{ parameters.yesNo }}
# File: azure-pipelines.yml
trigger:
- main

extends:
  template: simple-param.yml
  parameters:
      yesNo: false # set to a non-boolean value to have the build fail

templateContext를 사용하여 템플릿에 속성 전달

템플릿에서 매개 변수로 사용되는 단계, 단계 및 작업에 더 많은 속성을 전달하는 데 사용할 templateContext 수 있습니다. 특히, templateContext, jobList, 또는 deploymentList 매개변수 데이터 형식 내에서 stageList을(를) 지정할 수 있습니다.

각 작업을 처리할 때 환경을 더 쉽게 설정할 수 있도록 할 수 templateContext 있습니다. 작업 및 해당 환경 속성 개체를 함께 templateContext 묶으면 YAML을 더 쉽게 유지 관리하고 이해할 수 있습니다.

이 예제에서 매개 변수 testSettesting-template.yml 에는 데이터 형식이 있습니다 jobList. 템플릿 testing-template.yml 은 각 키워드를 사용하여 새 변수 testJob만듭니다. 템플릿은 azure-pipeline.yml에서 설정되어 템플릿에 전달되는 testJob.templateContext.expectedHTTPResponseCode을 참조합니다.

응답 코드가 200이면 템플릿이 REST 요청을 만듭니다. 응답 코드가 500이면 템플릿은 디버깅을 위해 모든 환경 변수를 출력합니다.

templateContext 는 속성을 포함할 수 있습니다.

#testing-template.yml

parameters: 
- name: testSet
  type: jobList

jobs:
- ${{ each testJob in parameters.testSet }}:  # Iterate over each job in the 'testSet' parameter
  - ${{ if eq(testJob.templateContext.expectedHTTPResponseCode, 200) }}: # Check if the HTTP response is 200
    - job:
      steps: 
      - powershell: 'Invoke-RestMethod -Uri https://blogs.msdn.microsoft.com/powershell/feed/ | Format-Table -Property Title, pubDate'
      - ${{ testJob.steps }}    
  - ${{ if eq(testJob.templateContext.expectedHTTPResponseCode, 500) }}: # Check if the HTTP response is 500
    - job:
      steps:
      - powershell: 'Get-ChildItem -Path Env:\' # Run a PowerShell script to list environment variables
      - ${{ testJob.steps }} # Include additional steps from the 'testJob' object
#azure-pipeline.yml

trigger: none

pool:
  vmImage: ubuntu-latest

extends:
  template: testing-template.yml 
  parameters:
    testSet:  # Define the 'testSet' parameter to pass to the template
    - job: positive_test # Define a job named 'positive_test'
      templateContext:
        expectedHTTPResponseCode: 200 # Set the expected HTTP response code to 200 for this job
      steps:
      - script: echo "Run positive test" 
    - job: negative_test # Define a job named 'negative_test'
      templateContext:
        expectedHTTPResponseCode: 500 # Set the expected HTTP response code to 500 for this job
      steps:
      - script: echo "Run negative test" 

런타임에 템플릿을 선택하는 매개 변수

조건에 따라 파이프라인 YAML에서 다른 템플릿을 호출할 수 있습니다. 이 예제에서는 매개 변수 experimental.ymlexperimentalTemplate true일 때 YAML이 실행됩니다.

#azure-pipeline.yml
parameters:
- name: experimentalTemplate 
  displayName: 'Use experimental build process?'
  type: boolean
  default: false

steps:
- ${{ if eq(parameters.experimentalTemplate, true) }}: # Check if 'experimentalTemplate' is true
  - template: experimental.yml
- ${{ if not(eq(parameters.experimentalTemplate, true)) }}:  # Check if 'experimentalTemplate' is not true
  - template: stable.yml

매개 변수 데이터 형식

데이터 형식 노트
string string
number 로 제한될 수 있습니다. values:그렇지 않으면 숫자와 유사한 문자열이 허용됩니다.
boolean true 또는 false
object YAML 구조체
step 단일 단계
stepList 단계의 순서
job 단일 작업
jobList 작업 순서
deployment 단일 배포 작업
deploymentList 배포 작업 시퀀스
stage 단일 단계
stageList 단계의 순서

단계, stepList, 작업, jobList, 배포, deploymentList, stage 및 stageList 데이터 형식은 모두 표준 YAML 스키마 형식을 사용합니다. 이 예제에는 문자열, 숫자, 부울, 개체, 단계 및 stepList가 포함됩니다.

parameters:
- name: myString  # Define a parameter named 'myString'
  type: string  # The parameter type is string
  default: a string  # Default value is 'a string'

- name: myMultiString  # Define a parameter named 'myMultiString'
  type: string  # The parameter type is string
  default: default  # Default value is 'default'
  values:  # Allowed values for 'myMultiString'
  - default  
  - ubuntu  

- name: myNumber  # Define a parameter named 'myNumber'
  type: number  # The parameter type is number
  default: 2  # Default value is 2
  values:  # Allowed values for 'myNumber'
  - 1  
  - 2  
  - 4  
  - 8  
  - 16  

- name: myBoolean  # Define a parameter named 'myBoolean'
  type: boolean  # The parameter type is boolean
  default: true  # Default value is true

- name: myObject  # Define a parameter named 'myObject'
  type: object  # The parameter type is object
  default:  # Default value is an object with nested properties
    foo: FOO  # Property 'foo' with value 'FOO'
    bar: BAR  # Property 'bar' with value 'BAR'
    things:  # Property 'things' is a list
    - one  
    - two  
    - three  
    nested:  # Property 'nested' is an object
      one: apple  # Property 'one' with value 'apple'
      two: pear  # Property 'two' with value 'pear'
      count: 3  # Property 'count' with value 3

- name: myStep  # Define a parameter named 'myStep'
  type: step  # The parameter type is step
  default:  # Default value is a step
    script: echo my step 

- name: mySteplist  # Define a parameter named 'mySteplist'
  type: stepList  # The parameter type is stepList
  default:  # Default value is a list of steps
    - script: echo step one  
    - script: echo step two  

trigger: none  

jobs: 
- job: stepList  # Define a job named 'stepList'
  steps: ${{ parameters.mySteplist }}  # Use the steps from the 'mySteplist' parameter

- job: myStep  # Define a job named 'myStep'
  steps:
    - ${{ parameters.myStep }}  # Use the step from the 'myStep' parameter

개체를 순회하여 개체의 각 문자열을 출력할 수 있습니다.

parameters:
- name: listOfStrings  
  type: object
  default: 
  - one
  - two

steps:
- ${{ each value in parameters.listOfStrings }}: # Iterate over each value in the 'listOfStrings' parameter
  - script: echo ${{ value }} # Output the current value in the iteration

또한 개체 내의 중첩된 요소를 반복할 수 있습니다.

parameters:
- name: listOfFruits
  type: object
  default:
  - fruitName: 'apple'
    colors: ['red','green']
  - fruitName: 'lemon'
    colors: ['yellow'] 

steps:
- ${{ each fruit in parameters.listOfFruits }} : # Iterate over each fruit in the 'listOfFruits'
  - ${{ each fruitColor in fruit.colors}} : # Iterate over each color in the current fruit's colors
    - script: echo ${{ fruit.fruitName}} ${{ fruitColor }} # Echo the current fruit's name and color

개체의 키와 해당 값을 직접 참조할 수도 있습니다.

parameters:
  - name: myObject
    type: object
    default:
      key1: 'value1'
      key2: 'value2'
      key3: 'value3'

jobs:
- job: ExampleJob
  displayName: 'Example object parameter job'
  pool:
    vmImage: 'ubuntu-latest'
  steps:
  - script: |
      echo "Keys in myObject:"
      echo "Key1: ${{ parameters.myObject.key1 }}"
      echo "Key2: ${{ parameters.myObject.key2 }}"
      echo "Key3: ${{ parameters.myObject.key3 }}"
    displayName: 'Display object keys and values'

필수 매개 변수

매개 변수가 누락된 경우 파이프라인에서 오류를 자동으로 보고합니다. 템플릿의 시작 부분에 유효성 검사 단계를 추가하여 필요한 매개 변수를 확인하고 적절한 조치를 취할 수 있습니다.

Bash를 사용하여 매개 변수를 solution 확인하는 예제는 다음과 같습니다.

# File: steps/msbuild.yml

parameters:
- name: 'solution'
  default: ''
  type: string

steps:
- bash: |
    if [ -z "$SOLUTION" ]; then
      echo "##vso[task.logissue type=error;]Missing template parameter \"solution\""
      echo "##vso[task.complete result=Failed;]"
    fi
  env:
    SOLUTION: ${{ parameters.solution }}
  displayName: Check for required parameters
- task: msbuild@1
  inputs:
    solution: ${{ parameters.solution }}
- task: vstest@2
  inputs:
    solution: ${{ parameters.solution }}

필요한 매개 변수가 누락된 경우 템플릿이 실패했음을 표시하려면 다음을 수행합니다.

# File: azure-pipelines.yml

# This will fail since it doesn't set the "solution" parameter to anything,
# so the template will use its default of an empty string
steps:
- template: steps/msbuild.yml

템플릿에 매개 변수를 전달할 수 있습니다. 이 섹션에서는 parameters 템플릿에서 사용할 수 있는 매개 변수와 해당 기본값을 정의합니다. 템플릿은 파이프라인이 실행되기 직전에 확장되어 ${{ }}으로 둘러싸인 값이 바깥쪽 파이프라인에서 받는 매개변수로 대체됩니다. 따라서 매개 변수에는 미리 정의된 변수사용할 수 있습니다.

여러 파이프라인에서 매개 변수를 사용하려면 변수 그룹을 만드는 방법을 참조하세요.

매개 변수가 있는 작업, 단계 및 단계 템플릿

# File: templates/npm-with-params.yml

parameters:
  name: ''  # defaults for any parameters that aren't specified
  vmImage: ''

jobs:
- job: ${{ parameters.name }}
  pool: 
    vmImage: ${{ parameters.vmImage }}
  steps:
  - script: npm install
  - script: npm test

파이프라인에서 템플릿을 사용하는 경우 템플릿 매개 변수에 대한 값을 지정합니다.

# File: azure-pipelines.yml

jobs:
- template: templates/npm-with-params.yml  # Template reference
  parameters:
    name: Linux
    vmImage: 'ubuntu-latest'

- template: templates/npm-with-params.yml  # Template reference
  parameters:
    name: macOS
    vmImage: 'macOS-10.13'

- template: templates/npm-with-params.yml  # Template reference
  parameters:
    name: Windows
    vmImage: 'windows-latest'

단계 또는 스테이지 템플릿에서 매개 변수를 사용할 수도 있습니다. 예를 들어 매개 변수가 있는 단계는 다음과 같습니다.

# File: templates/steps-with-params.yml

parameters:
  runExtendedTests: 'false'  # defaults for any parameters that aren't specified

steps:
- script: npm test
- ${{ if eq(parameters.runExtendedTests, 'true') }}:
  - script: npm test --extended

파이프라인에서 템플릿을 사용하는 경우 템플릿 매개 변수에 대한 값을 지정합니다.

# File: azure-pipelines.yml

steps:
- script: npm install

- template: templates/steps-with-params.yml  # Template reference
  parameters:
    runExtendedTests: 'true'

참고

스칼라 매개 변수는 항상 문자열로 처리됩니다. 예를 들어, eq(parameters['myparam'], true)true를 거의 항상 반환하며, 심지어 myparam 매개 변수가 false 단어인 경우에도 마찬가지입니다. 비어있지 않은 문자열은 부울 컨텍스트에서 true로 캐스팅됩니다. 문자열을 명시적으로 비교하기 위해 해당 식을 다시 작성할 수 있습니다. eq(parameters['myparam'], 'true')

매개 변수는 스칼라 문자열로 제한되지 않습니다. 매개 변수가 확장되는 위치에 매핑이 예상되는 한 매개 변수는 매핑일 수 있습니다. 마찬가지로 시퀀스가 필요한 위치에 시퀀스를 전달할 수 있습니다. 예시:

# azure-pipelines.yml
jobs:
- template: process.yml
  parameters:
    pool:   # this parameter is called `pool`
      vmImage: ubuntu-latest  # and it's a mapping rather than a string


# process.yml
parameters:
  pool: {}

jobs:
- job: build
  pool: ${{ parameters.pool }}