1

鉴于我有多个构建基于 Gradle 5.X 的应用程序的代理,我想开始在所有代理之间缓存 Gradle 依赖项。

我尝试共享.gradle文件夹,但是当我尝试在 2 个代理上运行相同的构建时,其中一个代理失败:

Caused by: org.gradle.api.UncheckedIOException: 

Failed to create parent directory '/home/buildagent/.gradle/caches/5.0' 

when creating directory '/home/buildagent/.gradle/caches/5.0/generated-gradle-jars'

如何跨 Teamcity 代理共享依赖项?

是否有支持 Gradle 5 及更高版本的通用解决方案?

我在Gradle 6.x 文档中找到了这个,但我在文档中没有找到任何东西5.x

4

1 回答 1

0

我不能说你得到异常的根本原因是什么,因为消息非常稀疏。我只能说,对于 Gradle 5,没有内置的解决方案可以通过网络共享本地缓存。Gradle 6.1 引入了复制和重用缓存的功能,但存在一些限制:

  • 它主要用于将内容复制到其他机器,可能具有不同的目录结构(缓存重定位)。
  • 仅支持模块缓存 ( $GRADLE_HOME/caches/modules-<version>)
  • 网络共享很可能仅用作只读依赖项缓存

那么,什么是适用于 Gradle 5 和 6 的便携式解决方案?根据最初引入缓存可重用性的票证(Make dependency caches relocateable #1338):

  1. 复制文件夹,而不是网络挂载。目录结构必须在不同机器之间保持一致。
  2. 使用您的依赖项安装先前导出的存储库:

    编写一个 Gradle 任务,从您的依赖项创建一个文件存储库并打包该文件存储库。然后在您的构建中包含“如果该文件存储库存在,请使用它”的逻辑。

    (来自此评论

于 2020-04-23T13:40:42.093 回答