1

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

4

1 回答 1

2

Variables can not be persisted in another phase for now. The variable’s value will be used the original defined for the variable not you changed by Write-Host.

There is the issue for variables not persistent between phases, you can follow up.

于 2017-12-07T07:05:02.857 回答