Azure DevOps YAML 管道任务输出变量正在截断 JSON 字符串中的左括号

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

我有以下 YAML 管道任务:

- task: PowerShell@2
  name: ReadrbacFromTemplate
  displayName: Read RBAC Assignments from Template
  inputs:
    filePath: '$(System.DefaultWorkingDirectory)/Get-AzRolesFromTemplate.ps1'
    arguments: '-BuildDirectory "$(Build.ArtifactStagingDirectory)"'
    showWarnings: true

包含脚本的文件在我的计算机上的本地 PowerShell 会话中运行良好。 脚本的最后几行是:

$roleAssignmentsJson = ConvertTo-Json $roleAssignments
Write-Host "##vso[task.setvariable variable=RoleAssignmentsObject]$roleAssignmentsJson"

即使当我测试将 JSON 字符串转换回对象时,它也能工作:

$assignments = ConvertFrom-Json -InputObject $roleAssignmentsJson

但是,在 YAML 管道中,JSON 字符串打印时缺少左括号。 因此,管道中的下一个任务因以下错误而失败:

ConvertFrom-Json : Invalid array passed in, ']' expected. (1): [

我确认第一个任务确实输出了缺少左括号的字符串:

    {
        "PrincipalId":  "PLACEHOLDER",
        "RoleDefinitionId":  "b24988ac-6180-42a0-ab88-20f7382dd24c"
    },
    {
        "PrincipalId":  "PLACEHOLDER",
        "RoleDefinitionId":  "00482a5a-887f-4fb3-b363-3b7fe8e74483"
    },
    {
        "PrincipalId":  "PLACEHOLDER",
        "RoleDefinitionId":  "73c42c96-874c-492b-b04d-ab87d138a893"
    }
]

我在这上面花了很多时间,但不确定我错过了什么。

谢谢。

azure-devops azure-pipelines-yaml
1个回答
0
投票

管道变量只能接收一行字符串类型值。如果将多行值传递给管道变量,它只接收第一行。

对于您的情况,您可以使用“

-Compress
”cmdlet 上的参数“
ConvertTo-Json
”将对象转换为单行 JSON 格式的字符串。然后将这一行字符串作为管道变量的值传递。

$roleAssignmentsJson = ConvertTo-Json -InputObject $roleAssignments -Compress
Write-Host "##vso[task.setvariable variable=RoleAssignmentsObject]$roleAssignmentsJson"
© www.soinside.com 2019 - 2024. All rights reserved.