Azure Pipeline中JSON数据跨Job传递失败问题求助
问题分析与解决
问题原因
核心问题在于Invoke-WebRequest返回的是WebResponse对象,而非直接的JSON字符串。直接将这个复杂对象赋值给输出变量时,Azure Pipelines无法正确序列化,导致变量传递到Job B后为空。
修复步骤
- 在Job A中提取纯JSON文本:获取响应的
Content属性,这才是接口返回的实际JSON内容。 - 在Job B中解析JSON字符串:传递过来的是文本格式,需要先转换成PowerShell对象才能访问属性。
修改后的完整YAML代码
jobs: # Set an output variable from job A - job: A steps: - powershell: | # 获取响应的纯JSON文本,而非整个WebResponse对象 $response = Invoke-WebRequest https://raw.githubusercontent.com/Sitecore/docker-images/master/tags/sitecore-tags.json $image_info = $response.Content Write-Host "获取到的JSON内容:$image_info" # 将JSON字符串赋值给输出变量 Write-Host "##vso[task.setvariable variable=myOutput_currentDate;isoutput=true]$image_info" name: setvarStep # Map the variable into job B - job: B dependsOn: A variables: myVarFromJobA: $[ dependencies.A.outputs['setvarStep.myOutput_currentDate'] ] steps: - powershell: | # 将字符串转换为PowerShell对象 $jsonObject = $myVarFromJobA | ConvertFrom-Json # 访问对象属性 Write-Host "JSON对象的Name属性值:$($jsonObject.Name)"
关键说明
- Job A中:
$response.Content提取了接口返回的纯JSON文本,确保输出变量存储的是可正常传递的字符串格式。 - Job B中:通过
ConvertFrom-Json将文本转为PowerShell对象后,才能正常访问.Name这类对象属性。
内容的提问来源于stack exchange,提问作者Marccelus T Enoh
相关产品推荐
相关产品推荐

