下面是我的问题的上下文:
- 一个gitlab ci yml管道
- 在同一个实习岗位上做几份工作
- 所有作业都使用需要使用其缓存的任务分级器
- 所有作业共享同一gradle缓存
我的问题:
有时,当同时存在多个管道时,我会得到:
哪里出错了:无法使用GradleUserHomeScopeServices.createCachingFileHasher()创建FileHasher类型的服务。
等待锁定文件哈希缓存(/cache/.gradle/caches/5.1/fileHash)超时。它当前正由另一个Gradle示例使用。所有者PID:149我们的PID:137所有者操作:我们的业务:锁定文件:/cache/myshop/reunion/.gradle/caches/5.1/fileHash/fileHash.lock
我找不到任何关于gradle使用的锁系统的文档。我不明白为什么当gradle操作不写入缓存目录时,锁定被定位。
有人知道锁是怎么工作的吗?或者,我可以简单地更改超时的持续时间,以允许伴随任务在失败之前等待足够长的时间?
翻译:www.DeepL.com/Translator
我试着在没有守护进程的情况下调整gradle,没有工作。
6条答案
按热度按时间yb3bgrhw1#
我通过杀死Activity Monitor(MacOS)中的所有
java
进程解决了这个问题。希望对你有帮助。v7pvogib2#
当您尝试在不同主机上运行的多个Gradle进程之间共享Gradle缓存时,通常会遇到此错误。我假设你的CI管道运行在不同的主机上,或者它们至少彼此隔离运行(例如,作为不同Docker容器的一部分)。
不幸的是,这样的场景是Gradle的currently not supported。Gradle开发人员Stefan Oehme写了这篇评论。共享Gradle用户主页:
Gradle进程将在无争用时持有锁(以提高性能)。争用是通过进程间通信宣布的,当进程在Docker容器中被隔离时,这是不起作用的。
他在后续评论中更清楚地指出(由我强调):
可能还有其他我们尚未发现的问题,因为在机器之间共享用户主页并不是我们为设计的用例。
换句话说:Gradle目前不支持在不同的机器或其他独立进程之间共享Gradle用户主目录,甚至只是共享其中该高速缓存部分。(参见my related question。)
我想解决这个问题的唯一方法是:
dxxyhpgq3#
另一种可能发生这种情况的情况是,其中一些Gradle相关文件位于需要重新身份验证的云文件系统(如OneDrive)上。
1.重新验证到云文件系统
to94eoyn4#
1.首先将
config file /etc/sysconfig/jenkins
更改编辑为root用户JENKINS_USER="root"
2.将
/var/lib/jenkins
文件权限修改为rootchown -R root:root jenkins
3.重新启动服务
service jenkins restart
p1tboqfb5#
您的例外:
字符串
这对我来说很有效:
型
(删除锁定文件)
w3nuxt5m6#
如果你使用的是vscode,并且是在windows中,那么在任务管理器中搜索vscode和与gradle关联的JAVA应该在那里。结束它,你应该很好地去。