You need to enable JavaScript to run this app. Jenkins+Gradle 如何将依赖检查报告发布至Sonar仪表板
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins+Gradle 如何将依赖检查报告发布至Sonar仪表板

修复依赖扫描及Sonar报告关联的配置与执行步骤

一、修正任务执行顺序

当前命令的任务顺序错误:Sonar扫描必须在依赖检查完成后运行,否则执行Sonar时依赖扫描报告还未生成,无法关联读取。

  • 原错误命令:./gradlew clean build sonarqube dependencyCheckAnalyze
  • 调整后命令:./gradlew clean build dependencyCheckAnalyze sonarqube

可在build.gradle中添加任务依赖,锁定顺序避免命令行写错:

// 强制Sonar任务在依赖检查完成后执行
tasks.named("sonarqube").configure {
    dependsOn "dependencyCheckAnalyze"
}

二、修复package-lock.json扫描报错

该报错来自OWASP DependencyCheck插件的默认自动识别逻辑:插件会自动扫描项目内所有支持的包管理器清单文件(含npm的package-lock.json),但当前环境未执行npm install,不存在node_modules目录,按项目实际场景处理:

场景1:项目无前端代码

说明工作区残留了无关的package-lock.json,需在build.gradle中补充dependencyCheck配置,关闭无关扫描、排除残留文件:

dependencyCheck {
    // 仅扫描Gradle管理的Java依赖范围
    scanConfigurations = [configurations.compileClasspath, configurations.runtimeClasspath]
    // 排除残留的package-lock.json,避免误扫描
    exclusions = ["${projectDir}/package-lock.json"]
    // 仅指定需要扫描的路径
    scanSet = [
        "${projectDir}/src",
        "${buildDir}/libs"
    ]
}

同时可在Jenkins任务中添加工作区清理步骤,删除项目路径下的无关package-lock.json文件。

场景2:项目包含前端模块

需先执行npm install生成依赖元数据,再触发依赖检查:

  • 方式1:在Jenkins自由风格任务的执行shell中,先切换到前端目录执行npm install,再运行gradle命令
  • 方式2:在build.gradle中添加自动化任务对齐流程:
// 新增npm install执行任务,替换为实际前端代码目录
task npmInstall(type: Exec) {
    workingDir = file("${projectDir}/your-frontend-module-path")
    commandLine "npm", "install"
}
// 依赖检查需在npm install完成后执行
tasks.named("dependencyCheckAnalyze").configure {
    dependsOn "npmInstall"
}

三、解决依赖扫描无有效内容的问题

当前build.gradle未配置dependencyCheck核心运行参数,易出现漏洞库下载失败、扫描范围不全的问题,补充以下配置:

dependencyCheck {
    // 配置NVD漏洞库下载规则,若有NVD API Key可填入避免下载限速
    nvd {
        // apiKey = "your-nvd-api-key"
    }
    // 固定报告输出路径,和Sonar配置对齐
    outputDirectory = file("${buildDir}/reports")
    // 扫描所有可解析的Gradle依赖范围,避免漏扫
    scanConfigurations = configurations.findAll { it.canBeResolved }
}

注意:首次执行会下载NVD漏洞库,需确保Jenkins节点可访问漏洞库地址,或配置内网镜像,否则会因漏洞库为空生成无有效内容的报告。

四、对齐Sonar与依赖检查的报告路径

需确保Sonar配置中指向的依赖扫描报告路径,和dependencyCheck实际生成的路径完全匹配,否则Sonar无法读取结果:

  • dependencyCheck默认生成的JSON报告路径:${buildDir}/reports/dependency-check-report.json
  • dependencyCheck默认生成的HTML报告路径:${buildDir}/reports/dependency-check-report.html

修正Sonar配置的路径引用,避免使用未定义或值错误的变量:

sonarqube {
    properties {
        // 保留原有其他配置
        property 'sonar.dependencyCheck.reportPath', "${buildDir}/reports/dependency-check-report.json"
        property 'sonar.dependencyCheck.htmlReportPath', "${buildDir}/reports/dependency-check-report.html"
    }
}

同时需确认:SonarQube服务端已安装OWASP Dependency-Check插件,否则即使路径正确,也无法解析依赖扫描结果。

五、可选优化:升级老旧插件版本

当前使用的sonarqube-gradle-plugin:2.7、dependency-check-gradle:6.0.3版本较老,和新版SonarQube服务器可能存在兼容性问题,可按服务器版本升级到匹配的稳定版插件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.12 19:15:02