如何在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
正确配置步骤
- 先装JFrog插件
在你Azure DevOps组织的「市场」里搜「JFrog」,安装官方的插件(这个插件包含Docker扫描、Artifactory集成等功能) - 配置JFrog服务连接
到项目设置的「服务连接」里,新增「JFrog Platform」类型的连接,填好你的Artifactory URL、Xray URL,再给一个有Xray扫描权限的API密钥 - 改流水线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
相关产品推荐
相关产品推荐

