我正在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值。
答案 0 :(得分:0)
我无法获得resultJson的值。
1。如果resultJson
是pipeline variable,则应使用InputJSON: $(resultJSON)
而不是InputJSON: $($resultJSON)
。
假设管道变量resultJSON
的值为100,那么管道中的所有任务都可以得到其值100。您可以使用Task
在$env:RESULTJSON=$json
范围内修改其值,然后该变量的值就是该PS任务中$json
的值。
但是请注意:其他任务将获得100,而不是$json
的值。 (区分管道范围和任务范围之间的区别)
2。如果resultJson
是PS任务中定义的变量,则其他任务无法访问其值,因为该变量仅在当前会话中有效。 (您可以添加第二个PS任务进行测试)
要在多个任务/步骤中定义变量,可以在PS任务中使用logging command,然后选中Set variables in scripts 。
logging命令不直接支持Json格式变量。因此,在定义变量之前,我们需要将其转换为一行:
$json=$json| ConvertTo-Json -Compress
Write-host "##vso[task.setvariable variable=testJSON]$json"
另一个方向是通过文件传递json数据。例如,第一个PS任务使用$JSON | Out-File Test.json
将内容输出到Test.json文件。下一个PS任务使用$Input = Get-Content Test.json
和Write-Host $Input
显示该值。另外,第二个任务可以是cmd任务,它们的(PS任务,CMD任务)默认工作目录相同。