gpt4 book ai didi

azure - 如何将 Json 变量传递给 Azure DevOps 管道中的命令行任务?

转载 作者:行者123 更新时间:2023-12-02 07:01:55 25 4
gpt4 key购买 nike

我正在 Powershell 任务中填充管道变量,并且它已成功填充:

    $env:RESULTJSON=$json
Write-host "##vso[task.setvariable variable=testJSON]$json"

但是,当我尝试使用它在命令行任务中传递值时,我无法这样做:

    task: CmdLine@2 
env:
InputJSON: $(testJSON)
inputs:
script:
echo %INPUTJSON%
'jsonProcessor.exe $(Build.BuildID),%INPUTJSON%'
workingDirectory: './jsonProcExe/'

我在 testJSON 中只得到“{”,而不是整个 JSON 值。

最佳答案

I am not able to get the value of resultJson.

1.如果resultJsonpipeline variable ,您应该使用 InputJSON: $(resultJSON) 而不是 InputJSON: $($resultJSON)

假设管道变量 resultJSON 的值为 100,则管道内的所有任务都可以获得其值 100。您可以在 Task 范围内使用 $env:RESULTJSON=$json,则该变量的值将是该 PS 任务中 $json 的值。

但请注意:其他任务将获得 100,而不是 $json 的值。 (区分Pipeline Scope和Task Scope的区别)

2.如果resultJson是PS任务中定义的变量,则其他任务无法访问其值,因为该变量仅在当前 session 中有效。 (您可以添加第二个PS任务来测试它)

要跨多个任务/步骤定义变量,您可以使用 logging command在PS任务中,检查Set variables in scripts .

更新 1

logging命令不直接支持Json格式变量。所以我们需要在定义变量之前将其转换为一行:

$json=$json| ConvertTo-Json -Compress
Write-host "##vso[task.setvariable variable=testJSON]$json"

更新2

另一个方向是通过文件传递json数据。例如,第一个 PS 任务使用 $JSON | Out-File Test.json 将内容输出到 Test.json 文件中。下一个 PS 任务使用 $Input = Get-Content Test.jsonWrite-Host $Input 来显示值。另外,第二个任务可以是cmd任务,它们(PS任务、CMD任务)默认工作目录是相同的。

关于azure - 如何将 Json 变量传递给 Azure DevOps 管道中的命令行任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62533368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com