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

为什么我在Gitlab CI/CD中找不到已配置的Maven缓存目录?

问题根因

1. 作业执行时序导致缓存被清理

GitLab CI作业默认执行顺序为:恢复缓存 → 拉取Git仓库代码。你的日志明确显示采用了clone全量拉取策略(日志输出Created fresh repository),该操作会清空$CI_PROJECT_DIR下所有不在Git版本控制内的文件/目录。你配置的缓存路径.m2/repository位于$CI_PROJECT_DIR下,缓存恢复后会被后续的全量克隆操作直接删除,因此script阶段无法找到对应目录。

2. 本地缓存局限性(潜在问题)

日志提示No URL provided, cache will not be downloaded from shared cache server,说明你未配置分布式缓存,缓存仅存储在当前运行作业的Runner节点本地。如果你的K8s集群部署了多副本GitLab Runner,后续作业调度到其他节点时会直接丢失历史缓存。


解决方案

方案1:修改Maven仓库路径到工作目录外(推荐)

调整Maven本地仓库路径到$CI_PROJECT_DIR之外,避免被Git拉取操作清理,修改配置如下:

variables:
  # 将maven仓库路径改到/cache目录下
  MAVEN_OPTS: "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=/cache/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
  MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true"

.cache-m2: &cache-m2
  cache:
    - key: "mavenRepo"
      paths:
        - /cache/.m2/repository

方案2:配置Git忽略缓存目录

保留原路径配置,新增Git清理规则,禁止删除.m2目录:

variables:
  # 新增该变量,告诉git clean忽略.m2目录
  GIT_CLEAN_FLAGS: -ffdx -e .m2/
  MAVEN_OPTS: "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"

方案3:配置分布式缓存(可选)

给GitLab Runner配置S3、MinIO等分布式缓存后端,解决多Runner副本缓存无法共享的问题,所有节点均可读取同一份Maven依赖缓存。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:12:03