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

如何在Azure DevOps流水线中下载Trivy扫描输出文件

在Azure DevOps流水线中处理Trivy扫描报告:发布工件或上传至存储账户

你已通过Azure PowerShell任务完成Trivy容器扫描,生成的报告路径为/home/vsts/work/1/s/report-$(Build.BuildId)-$(Build.DefinitionName).json,以下是两种实现需求的具体方案:

方案一:将报告发布为流水线工件

流水线工件可直接在流水线界面下载,只需把报告文件移至$(Build.ArtifactStagingDirectory)(流水线默认的工件暂存目录)后发布即可。

方式1:修改现有PowerShell任务,直接输出到工件暂存目录

调整扫描脚本,让Trivy直接把报告生成到工件暂存目录,省去后续移动步骤:

trivy -v
$filename = "report-$(Build.BuildId)-$(Build.DefinitionName).json"
# 直接指定输出路径为工件暂存目录
$outputPath = Join-Path $(Build.ArtifactStagingDirectory) $filename
trivy image -f json -o $outputPath python:3.4-alpine
write-host "扫描报告已生成至:$outputPath"

# 可选:验证文件是否存在
echo "工件暂存目录内容:"
dir $(Build.ArtifactStagingDirectory)

随后添加发布构建工件任务(YAML示例):

- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'trivy-scan-reports'
    publishLocation: 'Container'

执行完成后,可在流水线的「工件」选项卡中找到该报告并下载。

方式2:保留原有扫描逻辑,添加复制文件任务

如果不想改动扫描脚本,可单独添加一个复制任务把生成的报告移到工件暂存目录:

# 复制报告到工件暂存目录
- task: CopyFiles@2
  inputs:
    SourceFolder: '$(Build.SourcesDirectory)'
    Contents: 'report-$(Build.BuildId)-$(Build.DefinitionName).json'
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

# 发布工件
- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'trivy-scan-reports'

方案二:上传报告至Azure存储账户

可通过Azure CLI或Azure PowerShell任务将报告上传到存储账户的Blob容器中,前提是流水线使用的服务主体需拥有存储账户的「Blob数据参与者」权限。

使用Azure CLI任务上传(Linux代理示例)

- task: AzureCLI@2
  inputs:
    azureSubscription: '你的Azure服务连接名称'
    scriptType: 'bash'
    scriptLocation: 'inlineScript'
    inlineScript: |
      az storage blob upload \
        --account-name 你的存储账户名 \
        --container-name 你的Blob容器名 \
        --file /home/vsts/work/1/s/report-$(Build.BuildId)-$(Build.DefinitionName).json \
        --name trivy-reports/report-$(Build.BuildId)-$(Build.DefinitionName).json \
        --auth-mode login

若使用Windows代理,将scriptType改为ps,用PowerShell语法执行上述命令即可。

使用Azure PowerShell任务上传

# 通过服务主体连接Azure
Connect-AzAccount -ServicePrincipal -TenantId $(TenantId) -ApplicationId $(ApplicationId) -CertificateThumbprint $(CertificateThumbprint)

# 定义存储账户和容器信息
$storageAccountName = "你的存储账户名"
$containerName = "你的Blob容器名"
$blobName = "trivy-reports/report-$(Build.BuildId)-$(Build.DefinitionName).json"
$filePath = "/home/vsts/work/1/s/report-$(Build.BuildId)-$(Build.DefinitionName).json"

# 上传文件到Blob容器
$storageAccount = Get-AzStorageAccount -ResourceGroupName 你的资源组名 -Name $storageAccountName
Set-AzStorageBlobContent -File $filePath -Container $containerName -Blob $blobName -Context $storageAccount.Context

内容的提问来源于stack exchange,提问作者learner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:17:31