我正在使用gradle 构建缓存 和 复合构建 处理奇怪的行为。 我有一个回购,其中有3个独立项目:
集成测试包括2个构建-模拟和应用程序,并以java应用程序形式启动这两种服务(取决于两个项目的jar任务)。
在本地运行时,一切似乎都很好(也使用构建缓存),但是在集成机上,发生了一些奇怪的事情。
我们使用gitlab,而pipiline很简单:
---|-- junit-mocks --|--- integration-tests
|-- junit-app ----|
junit模拟和junit应用程序并行(带有构建缓存),下一阶段是内部测试,其中从构建缓存加载应用和模拟的Java编译。 (如您在所附图片中所见)。
该错误仅是造成的结果,即未找到Main类(奇怪的#1)。当我查看jar文件时,它实际上是半空的,缺少很多类,但是那里有静态资源。当我查看gradle的build / classes目录时,它完全是空的。就像缓存被命中,但是类没有被复制?
怪异#2:是模拟程序已成功构建(并启动),但未成功构建应用程序。
当我关闭构建缓存时,构建通过。
任何想法可能导致此问题吗?
答案 0 :(得分:0)
您使用的是哪种类型的gitlab执行器/运行器?
您的缓存旨在在gitlab阶段之间共享,但是如果您使用的是docker executor,则每个阶段都将使用新的docker映像/环境,因此除非您使用工件,否则您将无法在它们之间共享缓存
如果您使用的Shell执行程序针对每个构建中的特定计算机,则只要缓存不在构建目录中,就可以利用缓存,因为该缓存在管道中的每个gitlab阶段都会发生变化。