Teamcity CI代理中的重用Gradle缓存

问题描述 投票:1回答: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 documentation中找到了这个,但是在5.x文档中没有找到任何东西。

gradle continuous-integration teamcity gradle-cache
1个回答
0
投票

我无法说出您得到的异常的根本原因是什么,因为该消息非常稀疏。我只能说,对于Gradle 5,没有内置解决方案可以通过网络共享本地缓存。您提到的copy and reuse the cache功能已在Gradle 6.1中引入,并有一些限制:

  • 主要用于将内容复制到其他计算机,可能具有不同的目录结构(缓存重定位)。
  • 仅支持模块缓存(仅$GRADLE_HOME/caches/modules-<version>)>>
  • 网络共享很可能仅作为read-only dependency cache
  • 那么,什么是适用于Gradle 5和6的便携式解决方案?根据最初介绍高速缓存可重用性的凭证(Make dependency caches relocateable #1338):

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

    编写一个Gradle任务,该任务根据依赖关系创建文件存储库,并将该文件存储库打包。然后在您的构建中添加逻辑,说明“如果存在该文件存储库,请使用它”。

  3. (来自this comment

© www.soinside.com 2019 - 2024. All rights reserved.