首页 > 解决方案 > 八达通中的输出变量 - 错误地传递空值

问题描述

我想通过输出变量将 Octopus 中的一个值从一个步骤传递到另一个项目,该值为“VM running”或“VM deallocated”。有两台服务器,一台服务器关闭,另一台正在运行,因此应相应地传递值。现在,当我使用输出变量的确切语法时,它会将 Null 值传递给下一步。

八达通部署项目步骤1:

$RG = $RGName
$VM = "#{StepTemplate_VMName}"
$WarningPreference = 'SilentlyContinue'
$VMStats = (Get-AzureRmVM -Name $VM -ResourceGroupName $RG -Status).Statuses
$stats = ($VMStats | Where Code -Like 'PowerState/*')[0].DisplayStatus

Set-OctopusVariable -name "RunStatus" -value $stats
write-host $stats     #value can either be "VM running" or "VM deallocated"

Octopus 部署项目第 2 步:

$VM = "#{StepTemplate_VMName}"
$Runstatus = $OctopusParameters["Octopus.Action[Step1].Output[$VM].RunStatus"]
write-host $Runstatus

如果我在第 2 步的代码中不使用 [$VM],它只会为两台机器提供 1 个值作为“VM running”根据 Octopus 网站中给出的语法,我们应该使用 VM 名称来传递特定于机器的不同价值观。所以我使用了 [$VM] 但它给两台机器都提供了空值

编辑:事件如果我将 $VM 的值硬编码为任何一个 VMName,它仍然给我 null。

标签: azurepowershelloctopus-deploy

解决方案


创建输出变量的步骤是否实际上正在停机的服务器上运行?当在多台机器上运行的步骤中创建输出变量时,将为该变量创建多个机器范围的值。当后续步骤在同一台机器上运行时,Octopus 将根据该范围选择正确的值。所以可能有点离题,但如果两个步骤都在两个目标上运行,指定$VM范围是多余的,只有在你想要不同机器的值时才需要。

由于此处对目标名称进行硬编码返回 null,因此输出变量创建步骤似乎未在该目标上运行。我建议通过在您的项目中创建一个名为OctopusPrintEvaluatedVariablesvalue的变量来调试它。True这将增加任务日志的详细程度并记录如何通过部署的每个步骤评估所有变量。


推荐阅读