无法解析ARM输出VSTS任务

时间:2018-03-06 13:09:42

标签: azure-resource-manager azure-pipelines-release-pipeline

我们使用VSTS部署ARM模板。 (Azure部署任务版本:2)。 在此任务中,我们可以配置输出变量。将在此变量中输出ARM模板的json输出。就我而言,它被称为armOutputJson。

在下一个任务中,我有一个内联的PowerShell脚本,它试图将此值转换为powershell对象。

$outputObject = ConvertFrom-Json -InputObject @"
$(armOutputJson)
"@
Write-Host "##vso[task.setvariable variable=armOutput]"$outputObject
Write-Host $outputObject

输出似乎是这样写给主机的:

@{storageAccountName=; functionAppName=}

看起来设置未正确解析? 此外,当尝试使用$(armOutput).functionAppName.value在我的部署任务中访问此变量时,我收到以下错误:

[error]错误:资源'@ {storageAccountName =; functionAppName =}。functionAppName.value'不存在。资源应该在部署之前存在。

任何人都知道如何将输出json解析为vsts变量并在另一个任务中使用它?

2 个答案:

答案 0 :(得分:0)

尝试调用Format-Custom格式化输出$outputObject | Format-Custom -Depth 5

Related issue ConvertFrom-Json not deep?

答案 1 :(得分:0)

您做得差不多,方法不错,只是一些语法上的错字。这应该有效(至少对我有用):

# parse string to json
$outputObject = $(armOutputJson) | ConvertFrom-Json

# outputObject is now object with more levels, 
# printing it just like that does not help as each property contains nested objects

# save temporary variable
$storageAccountName = $outputObject.storageAccountName.value

# export VSTS variable
Write-Host "Setting Variable storageAccountName=$storageAccountName"
Write-Host "##vso[task.setvariable variable=storageAccountName]$storageAccountName"