我们在项目中使用了owasp dependencyCheck插件。 使用的版本:1.4.5
我们在 Jenkins 上的构建作业中面临以下问题:
构建作业间歇性地失败,并指出":d挂起检查失败">
错误的堆栈跟踪如下所示:
:d悬疑检查
验证项目库存服务的依赖关系
检查更新并分析依赖项的漏洞
无法更新缓存的 Web 数据源,而是使用本地数据。结果可能不包括最近的漏洞。
初始化 CPE 分析器时发生异常。
生成项目库存服务报告
在项目库存服务中发现 0 个漏洞 :d权限检查失败
原因:org.owasp.dependencycheck.exception.ExceptionCollection:在依赖关系检查分析期间发生一个或多个异常 org.xml.sax.SAXException:无法获取新 cpe 的主密钥:cpe:/a:uchida_yoko_co._ltd:assetbase:8.0
org.owasp.dependencycheck.data.nvdcve.DatabaseException: 无法获取新 cpe 的主键: cpe:/a:uchida_yoko_co._ltd:assetbase:8.0 访问数据库时发生异常 at org.owasp.dependencycheck.Engine.analyzeDependencies(Engine.java:543) at org.owasp.dependencycheck.Engine$analyzeDependencies$0.call(未知来源) at org.owasp.dependencycheck.gradle.tasks.Check.check(Check.groovy:86) ...还有 66 个
如果你的代码有多个微服务,那么所有服务都会在 Jenkins 上本地创建一个数据库,并将其作为 owasp 依赖项检查任务的一部分更新到以下位置:
/{Your Jenkins directory}/.gradle/caches/modules-2/files-2.1/org.owasp/dependency-check-utils/dependency-check-data/3.0/dc.h2.db
由于此文件由所有服务共享,因此存在锁定问题。如果任何一个服务在生成过程中失败,则不会删除它在文件上创建的锁,因此其他服务随后将失败。 以下链接描述了该问题并提出了解决方案:
https://github.com/jeremylong/DependencyCheck/issues/410
此解决方案无法按原样使用,我们不得不更改"autoUpdate=true",以便服务创建一个数据库文件(如果它尚不存在)。 在上述更改之后(即在 dependencyCheck 任务中添加"数据目录"配置 [访问上面的链接以获取此配置]), 该问题似乎已解决。