azure - 八达通中的输出变量 - 错误地传递空值
问题描述
我想通过输出变量将 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。
解决方案
创建输出变量的步骤是否实际上正在停机的服务器上运行?当在多台机器上运行的步骤中创建输出变量时,将为该变量创建多个机器范围的值。当后续步骤在同一台机器上运行时,Octopus 将根据该范围选择正确的值。所以可能有点离题,但如果两个步骤都在两个目标上运行,指定$VM
范围是多余的,只有在你想要不同机器的值时才需要。
由于此处对目标名称进行硬编码返回 null,因此输出变量创建步骤似乎未在该目标上运行。我建议通过在您的项目中创建一个名为OctopusPrintEvaluatedVariables
value的变量来调试它。True
这将增加任务日志的详细程度并记录如何通过部署的每个步骤评估所有变量。
推荐阅读
- security - 当我们在网页上运行此工具时,从网络扩展中捕获/泄漏数据的风险是什么?
- javascript - 如何正确地将表单中的数据发送到我的 URL?
- javascript - 反应JS。动作已成功调度但未到达减速器
- android - 在应用程序中创建 CSV 或 TXT 文件并将其保存到“下载”文件夹 - Android
- amazon-web-services - Websocket 连接支持多少个客户端 API 网关?
- python - 赋值是什么意思是Python中的语句?
- python - 使用 Spacy 的基于模式的标点符号
- python - 散景显示空图表
- reactjs - 将组件重置为模态
- javascript - 如何在组件 Reactjs 中传递道具