复合构建中的Gradle构建缓存

时间:2019-01-30 10:13:36

标签: gradle build gitlab

我正在使用gradle 构建缓存 复合构建 处理奇怪的行为。 我有一个回购,其中有3个独立项目:

  • 应用
  • mo子
  • 集成测试

集成测试包括2个构建-模拟和应用程序,并以java应用程序形式启动这两种服务(取决于两个项目的jar任务)。

本地运行

在本地运行时,一切似乎都很好(也使用构建缓存),但是在集成机上,发生了一些奇怪的事情。

集成测试

我们使用gitlab,而pipiline很简单:

---|-- junit-mocks --|--- integration-tests
   |-- junit-app ----|

junit模拟和junit应用程序并行(带有构建缓存),下一阶段是内部测试,其中从构建缓存加载应用和模拟的Java编译。 (如您在所附图片中所见)。

该错误仅是造成的结果,即未找到Main类(奇怪的#1)。当我查看jar文件时,它实际上是半空的,缺少很多类,但是那里有静态资源。当我查看gradle的build / classes目录时,它完全是空的。就像缓存被命中,但是类没有被复制?

怪异#2:是模拟程序已成功构建(并启动),但未成功构建应用程序。

当我关闭构建缓存时,构建通过。

任何想法可能导致此问题吗?

Example of build

1 个答案:

答案 0 :(得分:0)

您使用的是哪种类型的gitlab执行器/运行器?

您的缓存旨在在gitlab阶段之间共享,但是如果您使用的是docker executor,则每个阶段都将使用新的docker映像/环境,因此除非您使用工件,否则您将无法在它们之间共享缓存

如果您使用的Shell执行程序针对每个构建中的特定计算机,则只要缓存不在构建目录中,就可以利用缓存,因为该缓存在管道中的每个gitlab阶段都会发生变化。