无法使用 GradleUserHomeScopeServices.createCachingFileHasher() 创建 FileHasher 类型的服务
Posted
技术标签:
【中文标题】无法使用 GradleUserHomeScopeServices.createCachingFileHasher() 创建 FileHasher 类型的服务【英文标题】:Could not create service of type FileHasher using GradleUserHomeScopeServices.createCachingFileHasher() 【发布时间】:2019-06-24 00:31:30 【问题描述】:这是我的问题的背景:
一个 gitlab ci yml 管道 在同一个实习中的几份工作 所有作业都使用需要使用缓存的任务 gradle 所有作业共享同一个 gradle 缓存我的问题:
有时,当同时有多个管道时,我会得到:
出了什么问题: 。
等待锁定文件哈希缓存 (/cache/.gradle/caches/5.1/fileHashes) 的超时。它当前正被另一个 Gradle 实例使用。 所有者 PID:149 我们的 PID:137 业主运营: 我们的操作: 锁定文件:/cache/myshop/reunion/.gradle/caches/5.1/fileHashes/fileHashes.lock
我找不到任何关于 gradle 使用的锁定系统的文档。我不明白为什么当 gradle 操作不写入缓存目录时会定位锁。
有人知道锁的工作原理吗?或者我可以简单地更改超时的持续时间以允许伴随的任务在失败之前等待足够长的时间吗?
由 www.DeepL.com/Translator 翻译
我尝试在没有守护程序的情况下调整 gradle,但没有成功。
【问题讨论】:
【参考方案1】:我通过在 Activity Monitor(MacOS) 中杀死所有 java
进程来解决此问题。希望对您有所帮助。
【讨论】:
没错!!它只对我有用!实际上我在没有找到所有java进程的情况下重新启动了mac并杀死了那些。懒惰的!!它开始起作用了。【参考方案2】:当您尝试在不同主机上运行的多个 Gradle 进程之间共享 Gradle 缓存时,通常会出现此错误。我假设您的 CI 管道在不同的主机上运行,或者它们至少彼此隔离运行(例如,作为不同 Docker 容器的一部分)。
不幸的是,这样的场景是 Gradle 的currently not supported。 Gradle 开发人员 Stefan Oehme 写了this comment wrt。共享 Gradle 用户主页:
如果 Gradle 进程处于非竞争状态,它们将持有锁(以提高性能)。争用是通过进程间通信来宣布的,当进程在 Docker 容器中被隔离时,这不起作用。
他在a follow-up comment(由我突出显示)中更清楚地指出:
可能还有其他我们尚未发现的问题,因为在机器之间共享用户主页并不是我们设计的用例。
换句话说:Gradle 目前不正式支持在不同机器或其他隔离进程之间共享 Gradle 用户主目录,甚至只是共享其中的缓存部分。 (另见my related question。)
我想为您的方案解决此问题的唯一方法是:
确保 CI 管道中的 Gradle 进程可以相互通信(例如,通过在同一主机上运行它们),或者 不要直接共享 Gradle 用户主页,例如,通过为所有 CI 管道创建副本,或 不要并行运行 CI 管道。【讨论】:
【参考方案3】:另一种可能发生的情况是,如果其中一些 Gradle 相关文件位于需要重新身份验证的 OneDrive 等云文件系统上。
-
重新认证到云文件系统
android Studio 中的“使缓存无效并重新启动”
【讨论】:
【参考方案4】:1.首先编辑你的config file /etc/sysconfig/jenkins
更改为root用户JENKINS_USER="root"
2.修改/var/lib/jenkins
文件权限为rootchown -R root:root jenkins
3.重启服务service jenkins restart
【讨论】:
以上是关于无法使用 GradleUserHomeScopeServices.createCachingFileHasher() 创建 FileHasher 类型的服务的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 StorageClass 配置卷 - 无法获取存储帐户的存储密钥
Worklight Studio 和本地开发,有时无法使用 Java 类,有时无法使用 HTML 文件
Ubuntu 80端口无法使用-非root用户无法使用1024以下端口