You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure DevOps后续步骤中使用YAML任务的JSON输出?

捕获DotNetCoreCLI任务的JSON输出并在后续步骤使用

你可以通过以下两种方式将JSON输出存储到变量中,供后续步骤直接引用或处理:

方法一:通过输出文件中转设置变量

  1. 修改原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'
  1. 添加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)引用。

  1. 后续任务中解析并使用变量:
- 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 18:42:16