Разрешение предопределенных переменных агента в выражениях среды выполнения
У меня есть следующий сценарий, он упрощен для краткости, но описывает мою проблему.
У меня есть конвейер 2 Job.
Задание: задание, которое выполняется
AdminPool
и выводит 2 переменные со следующими именами и. Имена важны, потому что каждое из них соответствует имени среды, работающей в отдельном
MachinePool
Пул развертывания виртуальных машин.
Upgrade
Задание: задание по развертыванию, зависящее от
BreakMatrix
задание, которое выполняется на VM MachinePool , с тегом, который выберет
ENV1
и окружающая среда.
Я пытаюсь передать одну из переменных в каждую из соответствующих сред:
- job: BreakMatrix
pool: AdminPool
steps:
- checkout: none
- powershell: |
$result1 = @{"Hostname" = "Env1Value"}
$result2 = @{"Hostname" = "Env2Value"}
Write-Host "##vso[task.setvariable variable=ENV1;isOutput=true;]$result1"
Write-Host "##vso[task.setvariable variable=ENV2;isOutput=true;]$result2"
name: outputter
- deployment: Upgrade
dependsOn: BreakMatrix
variables:
agentName: $(Environment.ResourceName)
agentName2: $(Agent.Name)
formatted: $[ format('outputter.{0}', variables['agentName']) ]
result1: $[ dependencies.BreakMatrix.outputs[format('outputter.{0}', variables['agentName'])] ]
result2: $[ dependencies.BreakMatrix.outputs[format('outputter.{0}', variables['agentName2'])] ]
result3: $[ dependencies.BreakMatrix.outputs[format('outputter.{0}', variables['Agent.Name'])] ]
hardcode: $[ dependencies.BreakMatrix.outputs['outputter.ENV2'] ]
json: $[ convertToJson(dependencies.BreakMatrix.outputs) ]
environment:
name: MachinePool
resourceType: VirtualMachine
tags: deploy-dynamic
strategy:
rolling:
preDeploy:
steps:
- powershell: |
echo 'Predeploy'
echo "agentName: $(agentName)"
echo "agentName2: $(agentName2)"
echo "env: $(Environment.ResourceName)"
echo "formatted: $(formatted)"
echo "harcode: $(harcode)"
echo "result1: $(result1)"
echo "result2: $(result2)"
echo "result3: $(result3)"
echo "json: $(json)"
deploy:
steps:
- powershell: |
echo 'Deploy'
Выход для
ENV2
шаг перед развертыванием:
Predeploy
agentName: ENV2
agentName2: ENV2
env: ENV2
formatted: outputter.ENV2
hardcode: {
Hostname:Env2Value}
result1:
result2:
result3:
json: {
outputter.ENV2:
\"Hostname\":\"Env2Value\"
}
Если я пытаюсь использовать предопределенную переменную в выражении зависимости, они, похоже, не разрешаются должным образом, но если я просто сопоставляю их с переменной / форматирую, они работают. Примечание. Имена среды фактически динамически вычисляются перед запуском этих заданий, поэтому я не могу использовать параметры или статические переменные времени / времени компиляции.
Любые предложения о том, как передать только соответствующую переменную в каждую из сред?
1 ответ
Я получил подтверждение от сообщества разработчиков, что это невозможно.
Соответствующая часть:
Но боюсь, что это требование не будет выполнено.
Причина в том, что выражение dependencies.xx.outputs не может прочитать переменную (переменные ['Agent.Name']) и значение выражения форматирования, определенные в конвейере YAML.
Теперь он поддерживает только жесткое кодирование имени переменной для получения соответствующего значения переменной задания.