我如何为多个项目创建一个单一的‘.gradle’缓存?

ni65a41a  于 2022-11-14  发布在  其他
关注(0)|答案(1)|浏览(225)

我们尝试在多个构建工作线程(jenkins中)中使用一个.gradle缓存,方法是在NFSmount中创建.gradle,并与所有工作线程共享。
现在,当我们使用gradle构建运行多个项目时,它们会因以下错误而失败:

Timeout waiting to lock artifact cache (/common/user/.gradle/caches/modules-2). It is currently in use by another Gradle instance.
Owner PID: 1XXXX
Our PID: 1XXXX
Owner Operation: resolve configuration ':classpath’
Our operation: resolve configuration ':classpath’
Lock file: /common/user/.gradle/caches/modules-2/modules-2.lock

在多个用户之间使用.gradle缓存共享的建议方法是什么?此模型适用于maven .m2缓存。
我们不能为每个工作线程使用.gradle,因为它占用了大量空间来存储缓存中的jar。

mum43rcc

mum43rcc1#

由于Gradle用于依赖项缓存的锁定机制,您无法让多个示例写入同一个缓存目录。
不过,您可以创建一个共享的只读依赖项缓存,供多个Gradle示例使用。您可以在文档中找到相关说明。基本机制是创建一个文件夹,其中预先填充了您认为构建所需的依赖项,然后将GRADLE_RO_DEP_CACHE环境变量设置为指向该文件夹。
与传统的依赖项缓存不同,此缓存的访问不需要锁定,从而使多个构建可以同时该高速缓存中读取。
由于此缓存是只读的,因此您需要事先向其添加依赖项。构建本身无法将其依赖项写回只读共享缓存。不过该高速缓存需要遵循Gradle预期的文件夹结构,这不是一个可以手动设置的东西。在实践中,获取工作共享缓存的方法是复制由现有Gradle示例创建的依赖项缓存。
只读缓存应该来自已经包含一些所需依赖项的Gradle依赖项缓存。[...]在CI环境中,最好有一个“播种”Gradle依赖项缓存的构建,然后将其复制到不同的目录。该目录随后可以用作其他构建的只读缓存。
共享缓存并不需要包含所有依赖项,每个单独的构建都会正常地获取任何缺失的依赖项,就好像共享缓存不存在一样。
https://docs.gradle.org/current/userguide/dependency_resolution.html#sub:shared-readonly-cache

相关问题