Передача переменных в шаблон yaml (например, параметров) в конвейерах Azure

Aug 20 2020

Чтобы свести к минимуму дублирование скриптов сборки, мы используем шаблоны в наших конвейерах. У этих шаблонов есть параметры. Однако теперь я столкнулся с проблемой, потому что мне нужно передать данные в шаблон, который еще не доступен при запуске конвейера. (данные генерируются в несколько этапов во время конвейера). Поскольку параметры раскрываются при запуске конвейера, я не могу передать данные в шаблон через параметры.

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

Есть ли способ сопоставить переменные в моем шаблоне? В идеале хотелось бы сделать что-то вроде этого:

stages:
- stage: Stage1
  jobs:
  - some job that creates output variables
- stage: Stage2
  jobs:
  - template: 'myTemplate.yaml'
    variables:
      data1: $[ stageDependencies.Stage1.some_job.outputs['taskname.data1']]

и в шаблоне должна быть доступна переменная data1.

Поэтому я стараюсь избегать использования: $[ stageDependencies.Stage1.some_job.outputs['taskname.data1']] в шаблоне , потому что Stage1может даже не существовать во всех конвейерах, использующих шаблон.

Я действительно могу это сделать, если шаблон содержит только шаги, а не несколько заданий:

- stage: Stage2
  jobs:
  - job: Job1
    variables:
      data1: $[ stageDependencies.Stage1.some_job.outputs['taskName.data1']]

    steps:
    - template: templates/Azure/CreateTenant.yaml

К сожалению, мои шаблоны содержат несколько вакансий

Обновление: я ввел запрос функции, чтобы лучше поддержать эту ситуацию: https://developercommunity.visualstudio.com/idea/1207453/yaml-template-variablesparameters-that-are-expande.html

Ответы

2 LeoLiu-MSFT Aug 21 2020 at 07:48

Я действительно могу это сделать, если шаблон содержит только шаги, а не несколько заданий. К сожалению, мои шаблоны содержат несколько вакансий

Чтобы решить эту проблему, вы можете определить переменные на уровне стадии, а не на уровне задания:

  - stage: Stage2
    variables:
      data1: $[ stageDependencies.Stage1.some_job.outputs['taskName.data1']]

    jobs:
      - template: templates/Azure/CreateTenant.yaml

Тогда мы могли бы избежать использования: $[ stageDependencies.Stage1.some_job.outputs['taskname.data1']]в шаблоне.

Вы можете проверить документ Области переменных для получения более подробной информации.