如何在Azure DevOps后续步骤中使用YAML任务的JSON输出?
捕获DotNetCoreCLI任务的JSON输出并在后续步骤使用
你可以通过以下两种方式将JSON输出存储到变量中,供后续步骤直接引用或处理:
方法一:通过输出文件中转设置变量
- 修改原DotNetCoreCLI任务,将JSON输出重定向到构建临时目录的文件中:
- task: DotNetCoreCLI@2 displayName: 'dotnet list package --vulnerable' inputs: command: custom custom: 'list' projects: | src/xxx/xxxx/xxxx/xxxx.csproj arguments: 'package --vulnerable --include-transitive --format json > $(Build.ArtifactStagingDirectory)/vulnerable-packages.json'
- 添加PowerShell任务读取文件内容,设置为可跨任务引用的管道变量:
- task: PowerShell@2 displayName: '读取漏洞包JSON并设置变量' inputs: targetType: 'inline' script: | $jsonContent = Get-Content -Path $(Build.ArtifactStagingDirectory)/vulnerable-packages.json -Raw Write-Host "##vso[task.setvariable variable=VulnerablePackagesJson;isOutput=true]$jsonContent"
这里VulnerablePackagesJson是自定义变量名,isOutput=true标记它为输出变量,后续同阶段任务可直接用$(VulnerablePackagesJson)引用。
- 后续任务中解析并使用变量:
- task: PowerShell@2 displayName: '处理漏洞包数据' inputs: targetType: 'inline' script: | $packages = ConvertFrom-Json '$(VulnerablePackagesJson)' # 遍历漏洞包示例 foreach ($pkg in $packages.packages) { Write-Host "漏洞包:$($pkg.id) | 版本:$($pkg.version) | 严重程度:$($pkg.vulnerabilities.severity)" }
方法二:直接在PowerShell中执行命令并捕获输出
跳过DotNetCoreCLI任务,直接用PowerShell执行命令并捕获输出,一步完成变量设置:
- task: PowerShell@2 displayName: '获取漏洞包并设置变量' name: GetVulnerablePackages # 任务名称,用于跨任务引用输出 inputs: targetType: 'inline' script: | $jsonOutput = dotnet list src/xxx/xxxx/xxxx/xxxx.csproj package --vulnerable --include-transitive --format json Write-Host "##vso[task.setvariable variable=VulnerablePackagesJson;isOutput=true]$jsonOutput"
后续同阶段任务引用时,需带上任务名称:$(GetVulnerablePackages.VulnerablePackagesJson)。
跨阶段传递变量注意事项
如果需要将变量传递到后续阶段,需在阶段的variables块中引用前一阶段的输出:
stages: - stage: Scan jobs: - job: ScanPackages steps: - task: PowerShell@2 name: GetVulnerablePackages inputs: targetType: 'inline' script: | $jsonOutput = dotnet list src/xxx/xxxx/xxxx/xxxx.csproj package --vulnerable --include-transitive --format json Write-Host "##vso[task.setvariable variable=VulnerablePackagesJson;isOutput=true]$jsonOutput" - stage: Process dependsOn: Scan variables: VulnerablePackages: $[ stageDependencies.Scan.ScanPackages.outputs['GetVulnerablePackages.VulnerablePackagesJson'] ] jobs: - job: ProcessPackages steps: - task: PowerShell@2 inputs: targetType: 'inline' script: | $packages = ConvertFrom-Json '$(VulnerablePackages)' # 自定义处理逻辑
内容的提问来源于stack exchange,提问作者Edwin
相关产品推荐
相关产品推荐

