最大限度地缩短 Docker 上 Gradle 项目的构建时间

Minimize build time for Gradle project on Docker

想象一下,我需要构建一个大型 Cuba 应用程序(它使用 Gradle 来管理依赖项,并在构建过程中生成一个 .war)。

我需要对构建和应用程序进行 dockerize。后者是 运行 在 Tomcat 图像中,其中复制了 .war

大多数依赖项在项目的连续构建之间实际上保持不变,但构建似乎每次都经过它们,就像永远...

我想从 gradle:jdk8(有点)生成自定义 Docker 图像,导入所有 Gradle 依赖项。 他的图像将用于连续构建以生成 .wars,并且仅当依赖项的版本发生变化时才会重建。

不过,我对 Gradle 还很陌生,我不知道:

有advice/suggestion吗?这可能吗? 希望我的问题很清楚,但我很难解释我的目标。问我更好的解释。 提前致谢。

您的意思是要为构建运行器(或构建代理)构建一个 Docker 图像,对吗?

  1. 如果不构建项目就无法导入依赖项,因为 Gradle 延迟解析依赖项,仅在需要时才解析。 例如。构建 CUBA 主题的工件仅在构建 web 主题时解析。

  2. 是的,可以重复使用以前下载的库工件(缓存在 ~/.gradle/caches)以在更短的时间内构建项目。

因此,在您的情况下,您需要通过在 Docker 容器中完全构建项目一次来创建构建运行器的 docker 映像。依赖项将被下载并缓存在文件系统中。然后您可以拉取该映像并再次将其用于后续构建,避免重新下载工件。

如果您更改项目中的 CUBA 平台版本,并且要避免为每个构建下载 cuba-*.jar 工件,则需要重新创建构建运行程序映像。