Я пытаюсь написать процесс выпуска VSTS/vNext, чтобы отключить цели выпуска из пулов балансировки нагрузки F5, например:
Disable-PoolMembers (logfile) [run on agent phase / Powershell script]
if that will cause an outage
ask for override [agentless phase]
if override
Disable-PoolMembers [run on agent phase / Powershell script]
Wait for Validation [agentless phase]
Enable-PoolMembers (logfile) [run on agent phase / Powershell script]
Когда мой Disable-PoolMembers.ps1 обнаруживает, что отключение запрошенных членов пула приведет к пулу без доступных/включенных членов, он установит переменную vsts с:
Write-Output ("##vso[task.setvariable variable=OutageCondition;]true")
А затем в безагентной фазе «запросить переопределение» есть пользовательское условие
and(succeeded(), eq(variables['OutageCondition'], 'true'))
Но фаза переопределения без агента никогда не выполняется.
Я добавил несколько встроенных сценариев powershell на разных этапах, чтобы показать, что такое значение переменной. В фазе Disable-PoolMembers я вижу, что значение OutageCondition установлено в true, но в фазе агента Enable-PoolMembers оно установлено в false. Таким образом, получается, что переменные, установленные с помощью команд регистрации, сохраняются только на той фазе, в которой они были установлены.
Я пытался вообще не определять переменную и устанавливать ее «на лету» в сценарии powershell с теми же результатами (значение устанавливается на этапе, но недоступно на последующих этапах). И я попытался установить переменную в VSTS в качестве области выпуска, и переменная доступна на всех этапах в ее определенном значении, но ее значение, измененное Powershell, доступно только на этапе, на котором оно установлено.
Это ожидаемое поведение: ##vso влияет только на значения внутри фазы? Могу ли я что-то сделать, чтобы изменения сохранялись на последующих этапах? Есть ли лучший подход?