繁体   English   中英

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

[英]How to pass Json variable to command line task in Azure DevOps pipeline?

我正在 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 值。

我无法获得 resultJson 的值。

1.如果resultJson管道变量,你应该使用InputJSON: $(resultJSON)而不是InputJSON: $($resultJSON)

假设管道变量resultJSON的值为 100,那么管道内的所有任务都可以得到它的值 100。你可以在Task scope 中使用$env:RESULTJSON=$json修改它的值,那么这个变量的值就是这个值该 PS 任务中的$json

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

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

要跨多个任务/步骤定义变量,您可以在 PS 任务中使用logging 命令,选中Set variables in scripts

更新 1

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

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

更新 2

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM