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

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

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

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

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

Примечание

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

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

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

Задайте параметры среды выполнения в начале YAML. Этот пример конвейера принимает значение image , а затем выводит значение в задании. Параметр 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 .

runtime parameters

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

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

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

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

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.

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

Циклический перебор параметров

Можно также выполнить цикл по строкам, числу и логическим параметрам.

В этом примере вы перебираете параметры и печатаете имя и значение параметра.

# 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

Проверить наличие пустого объекта Parameter

С помощью length()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, Степлист, Job, Жоблист, Deployment, Деплойментлист, Stage и Стажелист используют стандартный формат схемы YAML. Этот пример включает строку, число, логическое значение, объект, шаг и Степлист.

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 }}

Вопросы и ответы

Как можно использовать переменные в шаблонах?

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

В этом примере предопределенные переменные Build.SourceBranch и Build.Reason используются в условиях Template. yml.

# File: azure-pipelines.yml
trigger:
- main

extends:
  template: template.yml
# File: template.yml
steps:
- script: echo Build.SourceBranch = $(Build.SourceBranch) # outputs refs/heads/main
- script: echo Build.Reason = $(Build.Reason) # outputs IndividualCI
- ${{ if eq(variables['Build.SourceBranch'], 'refs/heads/main') }}: 
  - script: echo I run only if Build.SourceBranch = refs/heads/main 
- ${{ if eq(variables['Build.Reason'], 'IndividualCI') }}: 
  - script: echo I run only if Build.Reason = IndividualCI 
- script: echo I run after the conditions