Поскольку задача PowerShell по установке переменных находится в фазе build . Вам нужно добавить isOutput=true
в оператор setvariable. Проверьте Установите выходную переменную для нескольких заданий
"##vso[task.setvariable variable=$($output.name);isOutput=true]$($output.Value)"
Я внес в ваш yaml небольшие изменения для тестирования. Пожалуйста, проверьте это. У меня есть переменная env STORAGE = {'tags':[{'name':'A', 'Value':'1' }, { 'name':'B', 'Value':'2'}]}
phases:
- phase: build
queue: Hosted Ubuntu 1604
steps:
- powershell: |
$outputs = ConvertFrom-Json $($env:STORAGE)
foreach ($output in $outputs.tags) { echo $output.name; echo $output.Value; Write-Host ("##vso[task.setvariable variable=$($output.name);isOutput=true]$($output.Value)");}
name: myvariables
- powershell: |
echo "$(myvariables.A)"
echo "$(myvariables.A)"
- phase: DEVRelease
dependsOn: Build
queue: Hosted Ubuntu 1604
variables:
Da: $[ dependencies.build.outputs['myvariables.A'] ]
Db: $[ dependencies.build.outputs['myvariables.B'] ]
steps:
- powershell: |
echo $(Da)
echo $(Db)
. В приведенном выше сценарии я вывожу переменную при фазовой сборке, добавив isOutput=true
в оператор и присвоив моей задаче powershell имя name: myvariables
.
И я обращаюсь к выходной переменной на следующем этапе DEVRelease, используя инструкцию $[ dependencies.{dependent phase name}.outputs['{task name}.{variable name}'] ]
и присваиваю ее Переменным .
Тогда я могу успешно получить значение в задаче powershell в фазе DEVRelease.