Передача переменной в шаблон в конвейере YAML Azure
Рассмотрим следующую рабочую работу из конвейера лазурного yaml
- job: create_slot
dependsOn: setup
displayName: 'Create slot'
pool:
vmImage: 'windows-latest'
variables:
slotName: $[ dependencies.setup.outputs['slot.name'] ]
steps:
- bash: |
echo "Slot to be created: $(slotName)"
displayName: 'Show slot name'
- template: templates/create-slot.yml
parameters:
slot: $(slotName)
Из документации я ожидал, что смогу заменить marco$(slotName)
непосредственно с выражением времени выполнения $[ dependencies.setup.outputs['slot.name'] ]
, что приводит к следующему:
- job: create_slot
dependsOn: setup
displayName: 'Create slot'
pool:
vmImage: 'windows-latest'
steps:
- bash: |
echo "Slot to be created: $(slotName)"
displayName: 'Show slot name'
- template: templates/create-slot.yml
parameters:
slot: $[ dependencies.setup.outputs['slot.name'] ]
Но если вы это сделаете, конвейер выйдет из строя
Из ошибки складывается впечатление, что $[ dependencies.setup.outputs['slot.name'] ]
проходит как струна. Возможно ли то, что я здесь пытаюсь, возможно, у меня неправильный синтаксис.
1 ответ
Нет проблем с синтаксисом для вызова slot.name
на ваше create_slot
задание, здесь проблема должна быть связана со сценарием, который вы использовали в setup
работа. Поскольку вы не поделились сценариямиsetup
работу, я публикую со своей ниже вместе с некоторыми ключевыми моментами.
В твоем setup
задание, оно должно содержать один скрипт для сгенерированной выходной переменной name
. Кроме того, задача, которая содержит процесс генерации переменной, должна настроить имя ссылки.slot
.
Простой образец (обновленный):
jobs:
- job: setup
steps:
- checkout: none
- task: PowerShell@2
inputs:
targetType: 'inline'
script: 'echo "##vso[task.setvariable variable=name;isOutput=true]Staging"'
name: slot
- job: create_slot
dependsOn: setup
variables:
slotName: $[ dependencies.setup.outputs['slot.name'] ]
steps:
- checkout: none
- bash: |
echo "Slot to be created: $(slotName)"
displayName: 'Show slot name'
Только это create_slot
работа, которая зависит отsetup
задание может получить имя переменной, используя синтаксис $[ dependencies.Job1.outputs['slot.name'] ]
: