다음을 통해 공유


런타임 매개 변수

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