首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gitlab Runner Cache损坏

Gitlab Runner Cache损坏
EN

Stack Overflow用户
提问于 2021-12-14 14:52:51
回答 1查看 544关注 0票数 0

我有一个Gitlab /CD管道,多个作业并行运行,每个作业执行mvn test package。因为有很多依赖项,所以我使用Gitlabs特性来存储.m2文件夹:

代码语言:javascript
复制
cache:
  key: "$CI_PROJECT_NAME"
  paths:
    - .m2/repository

我使用CI_PROJECT_NAME是因为我希望缓存对所有分支中的所有作业都可用。

它主要起作用,在许多工作中,我看到构建成功,然后是一条消息,即缓存要么已经创建,要么已经更新:

代码语言:javascript
复制
Creating cache my-project-name...
.m2/repository: found 10142 matching files and directories 
Archive is up to date!                             
Created cache

但是在一些工作中,Maven突然失败了:

代码语言:javascript
复制
355804 [ERROR] Failed to execute goal net.alchim31.maven:scala-maven-plugin:4.5.2:compile (default) on project spark: wrap: scala.reflect.internal.FatalError: Error accessing /builds/Kxs9HrJp/4/analytics/my-project-name/.m2/repository/org/apache/spark/spark-catalyst_2.12/3.1.1/spark-catalyst_2.12-3.1.1.jar: zip END header not found -> [Help 1]

似乎缓存被破坏了。如果我再次执行相同的任务,它现在总是失败。如果我通过UI清除运行程序缓存,同一作业将再次成功运行,直到它在某个时候对另一个文件失败。

我有种感觉,并发运行是问题所在,但我不知道为什么。每个作业在开始时下载缓存的当前状态。即使它不是最新的,maven也会简单地下载缺少的库。如果两个或多个作业试图“同时”更新/上载缓存,最后一个作业可以赢得并覆盖其他任务的缓存。

知道这里发生了什么吗?

EN

回答 1

Stack Overflow用户

发布于 2021-12-14 15:18:44

我认为这可能与并发工作人员有关(同时读一遍写)--如果您只收到过一次错误,我可以假设它可能错误地连接了从运行程序到缓存位置的连接,但我更经常看到的是,问题可能是并发性。

尝试通过分支/提交哈希将您的密钥更改为更具体,然后再试一次.

代码语言:javascript
复制
cache:
  key: $CI_COMMIT_REF_SLUG
  paths:
    - .m2/repository

或者使用像S3这样的分布式位置,并启用版本控制.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70350951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档