Параметры среды выполнения
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