我正在尝试编写一个 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 仅影响阶段内的值吗?我可以做些什么来使更改在后续阶段持续存在吗?有更好的方法吗?