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

Azure DevOps Services | Azure DevOps Server 2022 г. | Azure DevOps Server 2020 г.

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

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

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

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

Примечание

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

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

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

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

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

Этот пример конвейера включает image параметр с тремя размещенными агентами в качестве string параметров. В разделе jobs значение указывает агент из параметра , 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 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

Типы данных параметров

Тип данных Примечания
string строка
number может быть ограничено , в противном случае принимается любая строка, похожая на values:число.
boolean true или false
object любая структура YAML
step один шаг
stepList последовательность шагов
job одно задание
jobList последовательность заданий
deployment одно задание развертывания
deploymentList последовательность заданий развертывания
stage один этап
stageList последовательность этапов

Типы данных step, stepList, job, jobList, deployment, deploymentList, stage и stageList используют стандартный формат схемы YAML. Этот пример включает строку, число, логическое значение, объект, шаг и stepList.

parameters:
- name: myString
  type: string
  default: a string
- 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
- name: myObject
  type: object
  default:
    foo: FOO
    bar: BAR
    things:
    - one
    - two
    - three
    nested:
      one: apple
      two: pear
      count: 3
- name: myStep
  type: step
  default:
    script: echo my step
- name: mySteplist
  type: stepList
  default:
    - script: echo step one
    - script: echo step two

trigger: none

jobs: 
- job: stepList
  steps: ${{ parameters.mySteplist }}
- job: myStep
  steps:
    - ${{ parameters.myStep }}