런타임 매개 변수
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
런타임 매개 변수를 사용하면 파이프라인에 전달할 수 있는 값을 더 많이 제어할 수 있습니다. 런타임 매개 변수를 사용하여 다음을 수행할 수 있습니다.
- 런타임 시 스크립트 및 작업에 다양한 값 제공
- 제어 매개 변수 형식, 허용된 범위 및 기본값
- 템플릿 식을 사용하여 작업 및 스테이지 를 동적으로 선택
템플릿 및 파이프라인에서 매개 변수를 지정할 수 있습니다. 매개 변수에는 숫자 및 문자열과 같은 데이터 형식이 있으며 값의 하위 집합으로 제한될 수 있습니다. YAML의 섹션에서는 parameters
사용할 수 있는 매개 변수를 정의합니다.
매개 변수는 템플릿 구문 분석 시간에만 사용할 수 있습니다. 매개 변수는 파이프라인이 실행되기 직전에 확장되므로 묶인 ${{ }}
값이 매개 변수 값으로 대체됩니다. 파이프라인을 실행하는 동안 값을 보다 광범위하게 사용할 수 있어야 하는 경우 변수를 사용합니다.
참고 항목
이 지침은 클래식 파이프라인에는 적용되지 않습니다. 클래식 파이프라인의 매개 변수는 프로세스 매개 변수(클래식)를 참조하세요.
매개 변수는 이름 및 데이터 형식을 포함해야 합니다. 매개 변수는 선택 사항일 수 없습니다. YAML 파일 또는 파이프라인을 실행할 때 기본값을 할당해야 합니다. 기본값을 할당하지 않거나 기본값으로 설정 default
false
하지 않으면 사용 가능한 첫 번째 값이 사용됩니다.
templateContext를 사용하여 템플릿에서 매개 변수로 사용되는 단계, 단계 및 작업에 추가 속성을 전달합니다.
파이프라인에서 매개 변수 사용
YAML의 시작 부분에 런타임 매개 변수를 설정합니다.
이 예제 파이프라인에는 세 개의 image
호스트된 에이전트가 옵션으로 포함된 매개 변수가 string
포함되어 있습니다. 작업 섹션에서 값은 pool
작업을 실행하는 데 사용되는 매개 변수의 에이전트를 지정합니다. 파이프라인을 수동으로 트리거하여 실행할 때 값을 image
선택할 수 있도록 이 값은 trigger
없음으로 설정됩니다.
parameters:
- name: image
displayName: Pool Image
type: string
default: ubuntu-latest
values:
- windows-latest
- ubuntu-latest
- macOS-latest
trigger: none
jobs:
- job: build
displayName: build
pool:
vmImage: ${{ parameters.image }}
steps:
- script: echo building $(Build.BuildNumber) with ${{ parameters.image }}
파이프라인 실행 페이지에서 파이프라인 실행을 선택하여 파이프라인 을 실행합니다. 풀 이미지를 선택하는 옵션이 표시됩니다. 선택하지 않으면 기본 옵션이 ubuntu-latest
사용됩니다. YAML 편집기에서 파이프라인을 실행하는 경우 풀 이미지를 선택할 수 있는 옵션이 없습니다.
매개 변수와 함께 조건부 사용
조건부 논리의 일부로 매개 변수를 사용할 수도 있습니다. 조건부를 사용하면 조건을 충족 if
하는 경우 YAML의 일부가 실행됩니다.
매개 변수를 사용하여 실행되는 단계 결정
이 파이프라인은 파이프라인에서 테스트를 실행할지 여부를 제어하는 데 사용할 수 있는 두 번째 부울 매개 변수 test
를 추가합니다. 값 test
이 true이면 모든 테스트 실행을 출력하는 단계가 실행됩니다.
parameters:
- name: image
displayName: Pool Image
values:
- windows-latest
- ubuntu-latest
- macOS-latest
- name: test
displayName: Run Tests?
type: boolean
default: false
trigger: none
jobs:
- job: build
displayName: Build and Test
pool:
vmImage: ${{ parameters.image }}
steps:
- script: echo building $(Build.BuildNumber)
- ${{ if eq(parameters.test, true) }}:
- script: echo "Running all the tests"
매개 변수를 사용하여 사용되는 구성 설정
매개 변수를 사용하여 실행할 작업을 설정할 수도 있습니다. 이 예제에서는 형식인 매개 변수 값 config
에 따라 다른 아키텍처가 string
빌드됩니다. 기본적으로 아키텍처와 x64
아키텍처는 x86
모두 빌드됩니다.
parameters:
- name: configs
type: string
default: 'x86,x64'
trigger: none
jobs:
- ${{ if contains(parameters.configs, 'x86') }}:
- job: x86
steps:
- script: echo Building x86...
- ${{ if contains(parameters.configs, 'x64') }}:
- job: x64
steps:
- script: echo Building x64...
- ${{ if contains(parameters.configs, 'arm') }}:
- job: arm
steps:
- script: echo Building arm...
스테이지를 선택적으로 제외
매개 변수를 사용하여 스테이지 실행 여부를 설정할 수도 있습니다. 이 예제에는 각 단계에 대해 4개의 단계와 다른 작업이 있는 파이프라인이 있습니다. 매개 변수 runPerfTests
가 true이면 성능 테스트 단계가 실행됩니다. 기본값 runPerfTests
은 false이므로 업데이트가 없으면 네 단계 중 3개 단계만 실행됩니다.
parameters:
- name: runPerfTests
type: boolean
default: false
trigger: none
stages:
- stage: Build
displayName: Build
jobs:
- job: Build
steps:
- script: echo running Build
- stage: UnitTest
displayName: Unit Test
dependsOn: Build
jobs:
- job: UnitTest
steps:
- script: echo running UnitTest
- ${{ if eq(parameters.runPerfTests, true) }}:
- stage: PerfTest
displayName: Performance Test
dependsOn: Build
jobs:
- job: PerfTest
steps:
- script: echo running PerfTest
- stage: Deploy
displayName: Deploy
dependsOn: UnitTest
jobs:
- job: Deploy
steps:
- script: echo running UnitTest
매개 변수 반복
문자열, 숫자 및 부울 매개 변수를 반복할 수도 있습니다.
이 예제에서는 매개 변수를 반복하고 각 매개 변수의 이름과 값을 출력합니다. 네 가지 매개 변수가 있으며 각각 다른 형식을 나타냅니다. myStringName
는 한 줄 문자열입니다. myMultiString
는 여러 줄 문자열입니다. myNumber
is a number. myBoolean
는 부울 값입니다. 단계 섹션에서 스크립트 태스크는 각 매개 변수의 키와 값을 출력합니다.
# start.yaml
parameters:
- name: myStringName
type: string
default: a string value
- name: myMultiString
type: string
default: default
values:
- default
- ubuntu
- name: myNumber
type: number
default: 2
values:
- 1
- 2
- 4
- 8
- 16
- name: myBoolean
type: boolean
default: true
steps:
- ${{ each parameter in parameters }}:
- script: echo ${{ parameter.Key }}
- script: echo ${{ parameter.Value }}
# azure-pipeline.yaml
trigger: none
extends:
template: start.yaml
빈 매개 변수 개체 확인
식을 사용하여 length()
개체 매개 변수에 값이 없는지 여부를 확인할 수 있습니다.
parameters:
- name: foo
type: object
default: []
steps:
- checkout: none
- ${{ if eq(length(parameters.foo), 0) }}:
- script: echo Foo is empty
displayName: Foo is empty
stepList 매개 변수를 사용하여 단계 목록을 동적으로 포함
이 예제 stepList
에서는 매개 변수 형식을 사용하여 빌드 프로세스의 단계 목록을 동적으로 포함합니다.
- 주 파이프라인(
azure-pipelines.yml
)은 빌드 및 배포라는 두 가지 작업을 정의합니다. - 빌드 작업은 템플릿(
build.yml
)을 사용하고 매개 변수를 사용하여stepList
빌드 작업 목록을 전달합니다. - 템플릿에는
build.yml
매개 변수에 정의된 단계가build_tasks
동적으로 포함됩니다.
#azure-pipelines.yml
trigger:
- main
jobs:
- job: build
displayName: 'Build .NET Core Application'
pool:
vmImage: 'ubuntu-latest'
steps:
- checkout: self
- template: build.yml
parameters:
build_tasks:
- task: DotNetCoreCLI@2
displayName: 'Restore'
inputs:
command: 'restore'
projects: '**/*.csproj'
- task: DotNetCoreCLI@2
displayName: 'Build'
inputs:
command: 'build'
arguments: '--no-restore'
projects: '**/*.csproj'
- job: deploy
displayName: 'Pack for Azure App Service deployment'
dependsOn: build
pool:
vmImage: 'ubuntu-latest'
steps:
- download: current
artifact: drop
build.yml
템플릿:
- stepList 형식과 기본 빈 목록을 사용하여 매개 변수
build_tasks
를 정의합니다. - .NET Core SDK를 6.x로 설정합니다.
- 매개 변수의 각 단계를
build_tasks
반복합니다. - 목록에 정의된 각 단계를 실행합니다
build_tasks
.
#build.yml
parameters:
- name: build_tasks
type: stepList
default: []
steps:
- task: UseDotNet@2
displayName: 'Use .NET Core SDK'
inputs:
packageType: 'sdk'
version: '6.x'
- ${{ each step in parameters.build_tasks }}:
- ${{ step }}
- task: DotNetCoreCLI@2
displayName: 'Publish'
inputs:
command: 'publish'
arguments: '--configuration Release --output $(Build.ArtifactStagingDirectory)'
projects: '**/*.csproj'
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact'
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
매개 변수 데이터 형식
데이터 형식 | 주의 |
---|---|
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