章鱼输出变量-错误地传递空值

问题描述 投票:0回答:2

我想通过输出变量将Octopus中的值从一个步骤传递到项目的另一步骤,该值为“ VM running”或“ VMallocated”。有两台服务器,其中一台服务器已关闭,另一台正在运行,因此应相应地传递值。现在,当我使用Output变量的确切语法时,它将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"

章鱼部署项目步骤2:

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

[如果我在步骤2的代码中不使用[$ VM],则这两个计算机仅将1值作为“ VM running”根据章鱼网站上给出的语法,我们应该使用VM名称来传递计算机特定的不同值。所以我用了[$ VM],但它给两台机器都提供了空值

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

azure powershell azure-devops octopus-deploy
2个回答
0
投票

根据我在八达通中所做的事情,应该是:

$Runstatus = $OctopusParameters["Octopus.Action[Step1].Output.RunStatus"]

即使在帮助文档中也说明了这种格式。 https://octopus.com/docs/projects/variables/output-variables


0
投票

创建输出变量的步骤是否实际上已在关闭的服务器上运行?当在多台机器上运行的步骤中创建输出变量时,将为该变量创建多个机器范围的值。在同一台计算机上运行后续步骤时,章鱼将基于该范围选择正确的值。因此,可能有些不合时宜,但是如果两个步骤都在两个目标上都运行,则指定$VM范围是多余的,并且仅当您想要不同的机器值时才需要。

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

© www.soinside.com 2019 - 2024. All rights reserved.