다음을 통해 공유


런타임 매개 변수

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

런타임 매개 변수를 사용하면 파이프라인에 전달하는 값을 더 많이 제어할 수 있습니다. 런타임 매개 변수를 사용하면 다음을 수행할 수 있습니다.

  • 런타임 시 스크립트 및 작업에 다양한 값 제공
  • 매개 변수 형식, 허용되는 범위 및 기본값 제어
  • 템플릿 식을 사용하여 작업 및 스테이지 를 동적으로 선택

템플릿 및 파이프라인에서 매개 변수를 지정할 수 있습니다. 매개 변수에는 숫자 및 문자열과 같은 데이터 형식이 있으며 값의 하위 집합으로 제한될 수 있습니다. YAML의 섹션에서는 parameters 사용할 수 있는 매개 변수를 정의합니다.

매개 변수는 템플릿 구문 분석 중에만 사용할 수 있습니다. 파이프라인이 실행되기 전에 확장되어 매개 변수 값으로 ${{ }} 둘러싸인 값을 대체합니다. 파이프라인 실행 전체에서 값을 사용할 수 있어야 하는 경우 변수를 사용합니다.

참고

이 지침은 클래식 파이프라인에는 적용되지 않습니다. 클래식 파이프라인의 매개 변수는 프로세스 매개 변수(클래식)를 참조하세요.

매개 변수는 이름 및 데이터 형식을 포함해야 합니다. 매개 변수를 선택적으로 만들 수 없습니다. YAML 파일 또는 파이프라인을 실행할 때 기본값을 할당해야 합니다. 기본값을 할당하지 않거나 default을(를) false으로 설정하지 않으면 사용 가능한 첫 번째 값이 사용됩니다.

templateContext를 사용하여 템플릿에서 매개 변수로 사용되는 단계, 단계 및 작업에 더 많은 속성을 전달합니다.

매개 변수와 변수의 차이점은 무엇인가요?

다음 표에서는 Azure Pipelines의 매개 변수와 변수 간의 주요 차이점을 강조 표시합니다.

특징 매개 변수 변수
평가 시간 템플릿 구문 해석(큐) 평가는 구문에 따라 다릅니다. 매크로 구문($(var))으로 정의된 변수는 태스크가 실행되기 전에 런타임에 평가되고 스크립트 및 태스크에서 사용됩니다. 런타임 식($[variables.var])으로 정의된 변수는 작업 또는 스테이지가 실행되기 전에 평가되며 조건 또는 동적 변수 할당에 사용됩니다.
가변성이 큐 후 변경할 수 없음 파이프라인 실행 중에 사용자 정의, 환경 및 출력 변수를 동적으로 업데이트할 수 있습니다.
실행 중 UI 노출 실행 파이프라인 UI에 표시되며 실행 전에 설정할 수 있습니다. 파이프라인 UI에서 재정의 가능으로 설정된 경우 실행 중에 노출됩니다.
비밀 값 비밀 값에 대한 지원 없음 비밀로 설정할 수 있습니다.

파이프라인에서 매개 변수 사용

YAML 파일의 시작 부분에 런타임 매개 변수를 설정합니다.

이 예제 파이프라인에는 세 개의 image 호스트된 에이전트를 옵션으로 포함하는 매개 변수가 string 있습니다. 작업 섹션에서 값은 pool 작업을 실행하는 데 사용되는 매개 변수의 에이전트를 지정합니다. trigger는 없음으로 설정되어 있어, 파이프라인을 수동으로 트리거할 때 image의 값을 선택할 수 있습니다.

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 형식의 다른 아키텍처가 구축됩니다. 기본적으로 x86 아키텍처와 x64 아키텍처가 모두 빌드됩니다.

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이면 성능 테스트 단계가 실행됩니다. 기본값은 false이므로 값을 runPerfTests 업데이트하지 않는 한 네 단계 중 세 단계만 실행됩니다.

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

빈 매개 변수 개체가 있는지 확인

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

매개 변수 데이터 형식

데이터 형식 비고
string 문자열
stringList 여러 개의 항목을 선택할 수 있는 목록입니다. 템플릿에서 사용할 수 없음
number 로 제한될 수 있습니다. values:그렇지 않으면 숫자와 유사한 문자열이 허용됩니다.
boolean true 또는 false
object YAML 구조체
step 단일 단계
stepList 단계의 시퀀스
job 단일 작업
jobList 작업 시퀀스
deployment 단일 배포 작업
deploymentList 배포 작업 시퀀스
stage 단일 단계
stageList 단계의 순서

, step,stepList, job, jobList, deployment, deploymentListstagestringList 데이터 형식은 stageList모두 표준 YAML 스키마 형식을 사용합니다. 이 예제에는 string, number, boolean, objectstepstepList.

참고

데이터 형식은 stringList 템플릿에서 사용할 수 없습니다. 대신 템플릿에서 object 데이터 형식을 사용합니다.

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', only one default
  values:  # Allowed values for 'myMultiString'
  - default  
  - ubuntu  

- name: myStringlist # Define a parameter named 'myStringlist'
  type: stringList # The parameter type is stringList
  displayName: Regions
  values: # Allowed values for 'myStringlist'
    - WUS
    - CUS
    - EUS
  default: # Default values
    - WUS
    - CUS
    
- 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

- job: stringList  # Define a job named 'stringList'
  steps:
  - ${{ each region in parameters.myStringlist }}:
      - script: echo ${{region}}

매개 변수 보안 모범 사례

Azure Pipelines에서 런타임 매개 변수를 사용하는 경우 비밀 또는 중요한 값을 매개 변수 입력으로 전달하지 마세요. 매개 변수 값은 템플릿 구문 분석 시간에 확장되며 파이프라인 로그 또는 출력에 노출될 수 있습니다.

예기치 않거나 안전하지 않은 입력이 삽입되지 않도록 항상 허용되는 매개 변수 값의 유효성을 검사하고 제한합니다. 파이프라인 리소스에 대한 액세스 권한을 부여할 때 최소 권한 원칙을 따릅니다.

자격 증명, 토큰 또는 기타 기밀 데이터의 경우 비밀로 표시되고 Azure Key Vault, 파이프라인 UI 또는 변수 그룹에 저장된 파이프라인 변수를 사용합니다. 자세한 내용은 Azure Pipelines의 비밀 보호를 참조하세요.