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

如何在Azure DevOps流水线中集成JFrog Xray扫描Docker镜像?

Azure DevOps集成JFrog Xray实现镜像推送前扫描

能不能这么做?

完全可以。JFrog官方提供了Azure DevOps插件,支持在流水线里直接扫描本地刚构建好的Docker镜像,不用先推送到仓库,刚好满足你在推ACR前扫描的需求。

你现有配置的问题

你用的JFrogDocker@1任务没配对核心参数,导致找不到扫描选项,主要问题有这几个:

  • 没指定要扫描的本地镜像名称和标签,Xray根本不知道扫哪个镜像
  • 旧版本的JFrogDocker@1扫描参数格式和新版不一样,缺少关键配置项
  • 只填了Xray token,但JFrog扫描需要关联完整的JFrog平台连接(Artifactory+Xray),不是单独的Xray token

正确配置步骤

  1. 先装JFrog插件
    在你Azure DevOps组织的「市场」里搜「JFrog」,安装官方的插件(这个插件包含Docker扫描、Artifactory集成等功能)
  2. 配置JFrog服务连接
    到项目设置的「服务连接」里,新增「JFrog Platform」类型的连接,填好你的Artifactory URL、Xray URL,再给一个有Xray扫描权限的API密钥
  3. 改流水线YAML
    构建完镜像后,在扫描任务里指定要扫的本地镜像,关联刚才配的服务连接,设置扫描规则

修正后的完整YAML示例

parameters:
  imageName: ''
  includeLatestTag: false
  buildContext: '$(System.DefaultWorkingDirectory)/release/target/docker'
  publishDocker: ''

steps:
- task: Docker@1
  inputs:
    azureSubscriptionEndpoint: 'mysub'
    azureContainerRegistry: $(containerRegistry)
    command: build
    includeLatestTag: ${{ parameters.includeLatestTag }}
    dockerFile: '${{ parameters.buildContext }}/Dockerfile'
    useDefaultContext: false
    buildContext: ${{ parameters.buildContext }}
    imageName: ${{ parameters.imageName }}
    arguments: $(buildArgs)
  name: Build_Docker_Image
  displayName: 'Build Docker image'

# JFrog Xray扫描本地镜像任务,用新版@2任务
- task: JFrogDocker@2
  inputs:
    command: 'scan'
    # 替换成你刚才配置的JFrog平台服务连接名称
    jfrogPlatformConnection: '你的JFrog服务连接名'
    # 指定要扫描的本地镜像,和构建时的imageName一致
    dockerImage: '${{ parameters.imageName }}'
    # 传递构建时的标签,如果开启了latest就用latest,否则留空(或者用你实际的构建标签)
    dockerTag: ${{ parameters.includeLatestTag && 'latest' || '' }}
    # 全量扫描,包含DockerHub来的基础镜像
    scanType: 'full'
    # 发现漏洞直接终止流水线,避免推有问题的镜像
    failBuild: true
    includeLicenses: true
    numberOfThreads: '3'

- task: Docker@1
  inputs:
    azureSubscriptionEndpoint: 'mysub'
    azureContainerRegistry: $(containerRegistry)
    command: push
    includeLatestTag: ${{ parameters.includeLatestTag }}
    dockerFile: '${{ parameters.buildContext }}/Dockerfile'
    useDefaultContext: false
    buildContext: ${{ parameters.buildContext }}
    imageName: ${{ parameters.imageName }}
  name: Push_Docker_Image
  displayName: 'Push Docker image'

几个要注意的点

  • 任务版本:一定要用JFrogDocker@2,旧版@1的扫描参数很不完善,容易出问题
  • 镜像标签要对应:dockerTag必须和你构建Docker镜像时用的标签完全一致,不然Xray找不到本地的镜像
  • 扫描范围:scanType: 'full'会扫定制镜像和它依赖的所有基础镜像,刚好符合你要扫DockerHub基础镜像的需求
  • 权限要够:JFrog服务连接的API密钥得有Xray的xray:scan权限,不然扫描会报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 18:40:56