Параметры среды выполнения

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

Параметры среды выполнения позволяют контролировать, какие значения можно передать в конвейер. С помощью параметров среды выполнения можно:

  • Предоставление различных значений скриптам и задачам во время выполнения
  • Типы параметров управления, допустимые диапазоны и значения по умолчанию
  • Динамическое выделение заданий и этапов с помощью выражений шаблона

Параметры можно указать в шаблонах и конвейере. Параметры имеют такие типы данных, как число и строка, и они могут быть ограничены подмножеством значений. Раздел parameters в YAML определяет доступные параметры.

Параметры доступны только во время синтаксического анализа шаблона. Параметры развертываются непосредственно перед запуском конвейера, чтобы значения, окруженные значениями ${{ }} , заменялись значениями параметров. Используйте переменные , если необходимо, чтобы значения были более широко доступны во время выполнения конвейера.

Примечание.

Это руководство не относится к классическим конвейерам. Параметры в классических конвейерах см. в разделе "Параметры процесса" (классическая модель).

Параметры должны содержать имя и тип данных. Параметры не могут быть необязательными. Значение по умолчанию должно быть назначено в файле YAML или при запуске конвейера. Если вы не назначаете значение по умолчанию или задаете значение default false, используется первое доступное значение.

Используйте templateContext для передачи дополнительных свойств этапам, шагам и заданиям, которые используются в качестве параметров в шаблоне.

Использование параметров в конвейерах

Задайте параметры среды выполнения в начале YAML.

В этом примере конвейер включает image параметр с тремя размещенными агентами в качестве string параметров. В разделе заданий значение указывает агент из параметра, pool используемого для запуска задания. Для trigger параметра задано значение none, чтобы можно было выбрать значение 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 критериям.

Использование параметров для определения действий, выполняемых

Этот конвейер добавляет второй логический параметр, 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...

Выборочно исключить этап

Можно также использовать параметры, чтобы задать, выполняется ли этап. В этом примере есть конвейер с четырьмя этапами и разными заданиями для каждого этапа. Этап теста производительности выполняется, если параметр runPerfTests имеет значение true. Значение runPerfTests по умолчанию равно false, поэтому без каких-либо обновлений выполняется только три из четырех этапов.

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 является числом. 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 :

  • Определяет параметр build_tasks с типом stepList и пустым списком по умолчанию.
  • Задает для пакета SDK для .NET Core значение 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 строка
number может быть ограничено, в противном случае принимается любая строка, похожая на values:число
boolean true или false
object любая структура YAML
step один шаг
stepList последовательность шагов
job одно задание
jobList последовательность заданий
deployment одно задание развертывания
deploymentList последовательность заданий развертывания
stage один этап
stageList последовательность этапов

Шаг, stepList, job, jobList, deployment, 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