Конвейер Azure Devops: определение переменной и использование ее в качестве входных данных для задачи на другом этапе.

У меня есть задание конвейера выпуска Azure DevOps, в котором есть 4 задачи.

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

Мы можем предположить, что все 4 шага - это сценарии PowerShell.

Задача 1 Powershell:

Write-Host "##vso[task.setvariable variable=myvariable;]abcdefg"

Задача 2 Powershell: task2

PowerShell внутри задачи 2:

Write-Host "$(myvariable)"

Как мне установить переменную в задаче 1 и получить к ней доступ как к входной переменной в задаче 2?

Мой результат был:

Task2 - $ (myvariable) как отображаемое имя

но вывод самого сценария PowerShell был:

abcdefg


person ldragicevic    schedule 12.08.2019    source источник
comment
Как я могу установить переменную в задаче 1 и получить к ней доступ как к входной переменной в задаче 2? поправьте меня, если я вижу это неправильно, но ваша установка уже отвечает на этот вопрос. я не уверен, что вы здесь спрашиваете   -  person D.J.    schedule 13.08.2019
comment
@ D.J. Отображаемое имя задачи 2 должно быть Task2 - abcdefg, но на самом деле это Task2 - $ (myvariable).   -  person ldragicevic    schedule 13.08.2019
comment
возможно, имена задач не поддерживают динамическую интерполяцию   -  person 4c74356b41    schedule 13.08.2019


Ответы (1)


Write-Host "## vso [task.setvariable variable = myvariable;] abcdefg"

Это потому, что переменная, созданная этим сценарием, не является предварительно определенной переменной.

Что касается логики выполнения, после того, как вы поставите конвейер в очередь, вы можете увидеть, что имя конвейера, имя задачи отображаются в первую очередь, даже если сценарий не выполняется. Итак, если эти имена используют переменную для их определения, переменная просто может получить значение из предопределенной переменной. Поскольку компиляция значения переменной попадает в конвейер / имя задачи всегда сначала, чем выполняется скрипт.

Кроме того, сценарий в задаче просто создает переменную сценария, и эта переменная сценария существует только в течение времени существования фазы и уничтожается после выполнения.

Как я могу установить переменную в задаче 1 и получить к ней доступ как к входной переменной в задаче 2?

Как хотите, если получите это в другом скрипте, просто используйте $(xxx) или $env:xxx. Но для name $() просто может получить предварительно определенное значение переменной вместо значения переменной скрипта.

person Merlin Liang - MSFT    schedule 13.08.2019