[英]How to pass Json variable as inputs in Azure DevOps pipeline task
[英]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 。
日志记录命令不直接支持 Json 格式变量。 所以我们需要在定义变量之前将其转换为一行:
$json=$json| ConvertTo-Json -Compress
Write-host "##vso[task.setvariable variable=testJSON]$json"
另一个方向是通过文件传递 json 数据。 例如第一个 PS 任务使用$JSON | Out-File Test.json
$JSON | Out-File Test.json
到 output 将内容放入Test.json 文件中。 而下一个 PS 任务使用$Input = Get-Content Test.json
和Write-Host $Input
来显示值。 此外,第二个任务可能是 cmd 任务,它们(PS 任务,CMD 任务)默认工作目录是相同的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.