无法使用 GradleUserHomeScopeServices.createCachingFileHasher() 创建 FileHasher 类型的服务

Could not create service of type FileHasher using GradleUserHomeScopeServices.createCachingFileHasher()

这是我的问题的背景:

我的问题:

有时,当同时有多个管道时,我得到:

出了什么问题: 无法使用 GradleUserHomeScopeServices.createCachingFileHasher() 创建 FileHasher 类型的服务。

Timeout waiting to lock file hash cache (/cache/.gradle/caches/5.1/fileHashes). It is currently in use by another Gradle instance. Owner PID: 149 Our PID: 137 Owner Operation: Our operation: Lock file: /cache/myshop/reunion/.gradle/caches/5.1/fileHashes/fileHashes.lock

我找不到任何关于 gradle 使用的锁系统的文档。我不明白为什么在 gradle 操作不写入缓存目录时会定位锁。

有人知道锁的工作原理吗?或者我可以简单地更改超时持续时间以允许伴随任务在失败之前等待足够长的时间轮到它们吗?

翻译成www.DeepL。com/Translator

我尝试在没有守护进程的情况下调整 gradle,但没有成功。

您通常会在尝试在 运行 不同主机上的多个 Gradle 进程之间共享 Gradle 缓存时遇到此错误。我假设您的 CI 管道 运行 在不同的主机上,或者它们至少 运行 彼此隔离(例如,作为不同 Docker 容器的一部分)。

不幸的是,这种情况currently not supported by Gradle. Gradle developer Stefan Oehme wrote this comment wrt。共享 Gradle 用户主页:

Gradle processes will hold locks if they are uncontended (to gain performance). Contention is announced through inter-process communication, which does not work when the processes are isolated in Docker containers.

他在 a follow-up comment 中更清楚地说明(由我突出显示):

There might be other issues that we haven't yet discovered though, since sharing a user home between machines is not a use case we have designed for.

换句话说:Gradle 目前不正式支持在不同机器或其他隔离进程之间共享 Gradle 用户主目录,甚至只是其中的缓存部分。 (另见 。)

我想针对您的情况解决此问题的唯一方法是:

  • 确保 CI 管道中的 Gradle 进程可以相互通信(例如,通过 运行 在同一主机上连接它们),或者
  • 不要直接共享 Gradle 用户主页,例如,通过为所有 CI 管道创建副本,或者
  • 不要 运行 CI 管道并行。

我通过终止 Activity Monitor(MacOS) 中的所有 java 进程来解决这个问题。希望对你有帮助。

另一种可能发生的情况是,如果其中一些 Gradle 相关文件位于需要重新验证的云文件系统(如 OneDrive)上。

  1. 重新认证到云文件系统
  2. "Invalidate caches and restart" 在 Android 工作室

1.First 编辑您的 config file /etc/sysconfig/jenkins 更改为 root 用户 JENKINS_USER="root"

2.Modify /var/lib/jenkins root 文件权限 chown -R root:root jenkins

3.Restart您的服务service jenkins restart