Поделиться через


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

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

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

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

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

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

Примечание.

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

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

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

Какова разница между параметрами и переменными?

В следующей таблице перечислены основные различия между параметрами и переменными в Azure Pipelines.

Функция Параметры Переменные
Время оценки Синтаксический анализ шаблона (очередь) Оценка зависит от синтаксиса. Переменные, определенные с помощью синтаксиса макросов ($(var)) вычисляют во время выполнения перед выполнением задачи и используются в сценариях и задачах. Переменные, определенные с помощью выражений среды выполнения ($[variables.var]) оцениваются перед выполнением задания или этапа и используются в условиях или динамическом назначении переменных.
Изменчивость Неизменяемый после очереди Определяемые пользователем, среды и выходные переменные можно динамически обновлять во время выполнения конвейера.
Воздействие пользовательского интерфейса во время выполнения Показан в пользовательском интерфейсе конвейера запуска и может быть задан перед выполнением Предоставляется во время выполнения, если задано в пользовательском интерфейсе конвейера как переопределяется
Значения секретов Поддержка секретных значений не поддерживается Можно задать как секреты

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

Задайте параметры среды выполнения в начале ФАЙЛА 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.

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

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

Вы также можете использовать параметры в рамках условной логики. При использовании условных условий часть 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

Проверка пустого объекта параметра

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, deploymentList, stage, stringList и stageList используют стандартный формат схемы YAML. Этот пример включает string, number, boolean, object, step и stepList.

Примечание.

Тип 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, пользовательском интерфейсе конвейера или группах переменных. Дополнительные сведения см. в статье "Защита секретов в Azure Pipelines".