如何在CI流水线中缓存OWASP Dependency Check的NVD数据库
在Maven/Gradle CI流水线中缓存OWASP Dependency Check的NVD数据库
OWASP Dependency Check每次运行都重新下载NVD数据库确实会拖慢CI速度,下面针对Maven和Gradle分别给出缓存方案:
Maven 项目
1. 插件配置(可选但推荐)
在pom.xml里给Dependency Check插件指定固定的数据库存储路径,方便CI工具精准缓存:
<plugin> <groupId>org.owasp</groupId> <artifactId>dependency-check-maven</artifactId> <version>最新版本号</version> <configuration> <!-- 指定自定义数据库存储目录 --> <dataDirectory>${user.home}/.owasp-dependency-check-data</dataDirectory> <!-- 开启增量更新,减少后续下载量 --> <autoUpdate>true</autoUpdate> </configuration> <executions> <execution> <goals> <goal>check</goal> </goals> </execution> </executions> </plugin>
2. CI流水线缓存配置
以主流CI工具为例:
- GitHub Actions:在工作流配置文件中添加缓存步骤
- name: Cache OWASP Dependency Check Database uses: actions/cache@v3 with: path: ~/.owasp-dependency-check-data key: ${{ runner.os }}-owasp-db-${{ hashFiles('pom.xml') }} # 当key不匹配时,回退到最近的有效缓存 restore-keys: | ${{ runner.os }}-owasp-db-
- GitLab CI:在
.gitlab-ci.yml中配置缓存规则
cache: paths: - ~/.owasp-dependency-check-data/ key: files: - pom.xml prefix: $CI_RUNNER_OS-owasp-db
Gradle 项目
1. 插件配置(可选但推荐)
在build.gradle或build.gradle.kts中指定数据库存储路径:
plugins { id 'org.owasp.dependencycheck' version '最新版本号' } dependencyCheck { // 指定自定义数据库存储目录 dataDir = file("${System.getProperty('user.home')}/.owasp-dependency-check-data") // 开启自动增量更新 autoUpdate = true }
2. CI流水线缓存配置
- GitHub Actions:
- name: Cache OWASP Dependency Check Database uses: actions/cache@v3 with: path: ~/.owasp-dependency-check-data key: ${{ runner.os }}-owasp-db-${{ hashFiles('build.gradle', 'build.gradle.kts') }} restore-keys: | ${{ runner.os }}-owasp-db-
- GitLab CI:
cache: paths: - ~/.owasp-dependency-check-data/ key: files: - build.gradle - build.gradle.kts prefix: $CI_RUNNER_OS-owasp-db
注意事项
- 缓存key中加入项目配置文件的哈希值,能在插件版本更新时自动触发新缓存生成,避免使用过期数据库
- 开启
autoUpdate后,每次运行只会下载增量更新,配合缓存能最大化减少耗时 - 如果CI环境使用容器化部署,要确保缓存目录挂载到了容器的持久化存储中
内容的提问来源于stack exchange,提问作者Miguel Suarez Peleteiro
相关产品推荐
相关产品推荐

