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

如何修改Azure DevOps中Trivy扫描Pipeline以支持多容器镜像

修改Azure DevOps Pipeline以支持多容器镜像扫描

方法1:串行遍历多个镜像(简单直接)

将原Pipeline的变量和扫描步骤修改为以下内容,通过定义镜像列表并循环扫描每个镜像,生成独立的报告文件:

name: $(BuildDefinitionName)_$(date:yyyyMMdd)_$(BuildID)$(rev:.r)

resources:
- repo: self

variables:
  # 用逗号分隔多个需要扫描的容器镜像(格式:镜像名:标签)
  container_images: 'openjdk:17-jdk-slim,nginx:alpine,ubuntu:22.04'

jobs:
- job: TrivyScanContainerImage
  displayName: Scan multiple container images by Trivy
  steps:
  - script: |
      # 创建报告目录
      mkdir -p report
      # 拆分镜像列表为数组
      IFS=',' read -ra IMAGE_LIST <<< "$(container_images)"
      # 遍历每个镜像执行扫描
      for IMAGE in "${IMAGE_LIST[@]}"; do
        # 将镜像名中的冒号替换为短横线,避免文件名非法字符
        REPORT_NAME=$(echo "$IMAGE" | tr ':' '-')
        # 执行Trivy扫描并保存报告
        trivy image -s HIGH,CRITICAL "$IMAGE" | tee "./report/trivy-scan-${REPORT_NAME}.txt"
      done
    displayName: "Scan all container images with Trivy"
    continueOnError: true

  - publish: ./report
    artifact: ImageScans
    displayName: Publish All Scan Reports
    condition: always()

说明:

  • 变量container_images用于存储所有需要扫描的镜像,用逗号分隔即可快速扩展
  • 每个镜像的扫描报告以trivy-scan-镜像名-标签.txt命名,避免文件覆盖
  • 所有报告最终会打包到同一个ImageScans工件中,方便统一查看

方法2:并行扫描多个镜像(提升效率)

利用Azure DevOps的矩阵策略,为每个镜像启动独立的并行扫描任务,适合镜像数量较多的场景:

name: $(BuildDefinitionName)_$(date:yyyyMMdd)_$(BuildID)$(rev:.r)

resources:
- repo: self

jobs:
- job: TrivyScanContainerImage
  displayName: Scan container images by Trivy (Parallel)
  # 定义矩阵,每个镜像对应一个任务实例
  strategy:
    matrix:
      openjdk_17_slim:
        target_image: 'openjdk:17-jdk-slim'
      nginx_alpine:
        target_image: 'nginx:alpine'
      ubuntu_2204:
        target_image: 'ubuntu:22.04'
    # 可选:限制并行任务数量,避免代理资源耗尽
    maxParallel: 2

  steps:
  - script: |
      mkdir -p report
      # 生成安全的报告文件名
      REPORT_NAME=$(echo "$(target_image)" | tr ':' '-')
      trivy image -s HIGH,CRITICAL $(target_image) | tee "./report/trivy-scan-${REPORT_NAME}.txt"
    displayName: "Scan $(target_image) with Trivy"
    continueOnError: true

  - publish: ./report
    # 每个镜像生成独立的工件,便于区分
    artifact: ImageScan-$(target_image)
    displayName: Publish Scan Report for $(target_image)
    condition: always()

说明:

  • 矩阵中的每个条目对应一个镜像,任务会并行执行,大幅提升扫描速度
  • 每个镜像的扫描结果会打包到单独的工件中(如ImageScan-openjdk:17-jdk-slim),便于单独查看
  • 通过maxParallel可以控制同时运行的扫描任务数量,适配自托管代理的资源能力

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 16:38:18