最大限度地缩短 Docker 上 Gradle 项目的构建时间
Minimize build time for Gradle project on Docker
想象一下,我需要构建一个大型 Cuba 应用程序(它使用 Gradle 来管理依赖项,并在构建过程中生成一个 .war
)。
我需要对构建和应用程序进行 dockerize。后者是 运行 在 Tomcat 图像中,其中复制了 .war
。
大多数依赖项在项目的连续构建之间实际上保持不变,但构建似乎每次都经过它们,就像永远...
我想从 gradle:jdk8
(有点)生成自定义 Docker 图像,导入所有 Gradle 依赖项。
他的图像将用于连续构建以生成 .war
s,并且仅当依赖项的版本发生变化时才会重建。
不过,我对 Gradle 还很陌生,我不知道:
- 是否可以在不构建项目的情况下导入依赖项;
- 如果真的可以使用之前导入的依赖在更短的时间内构建项目。
有advice/suggestion吗?这可能吗?
希望我的问题很清楚,但我很难解释我的目标。问我更好的解释。
提前致谢。
您的意思是要为构建运行器(或构建代理)构建一个 Docker 图像,对吗?
如果不构建项目就无法导入依赖项,因为 Gradle 延迟解析依赖项,仅在需要时才解析。
例如。构建 CUBA 主题的工件仅在构建 web 主题时解析。
是的,可以重复使用以前下载的库工件(缓存在 ~/.gradle/caches)以在更短的时间内构建项目。
因此,在您的情况下,您需要通过在 Docker 容器中完全构建项目一次来创建构建运行器的 docker 映像。依赖项将被下载并缓存在文件系统中。然后您可以拉取该映像并再次将其用于后续构建,避免重新下载工件。
如果您更改项目中的 CUBA 平台版本,并且要避免为每个构建下载 cuba-*.jar 工件,则需要重新创建构建运行程序映像。
想象一下,我需要构建一个大型 Cuba 应用程序(它使用 Gradle 来管理依赖项,并在构建过程中生成一个 .war
)。
我需要对构建和应用程序进行 dockerize。后者是 运行 在 Tomcat 图像中,其中复制了 .war
。
大多数依赖项在项目的连续构建之间实际上保持不变,但构建似乎每次都经过它们,就像永远...
我想从 gradle:jdk8
(有点)生成自定义 Docker 图像,导入所有 Gradle 依赖项。
他的图像将用于连续构建以生成 .war
s,并且仅当依赖项的版本发生变化时才会重建。
不过,我对 Gradle 还很陌生,我不知道:
- 是否可以在不构建项目的情况下导入依赖项;
- 如果真的可以使用之前导入的依赖在更短的时间内构建项目。
有advice/suggestion吗?这可能吗? 希望我的问题很清楚,但我很难解释我的目标。问我更好的解释。 提前致谢。
您的意思是要为构建运行器(或构建代理)构建一个 Docker 图像,对吗?
如果不构建项目就无法导入依赖项,因为 Gradle 延迟解析依赖项,仅在需要时才解析。 例如。构建 CUBA 主题的工件仅在构建 web 主题时解析。
是的,可以重复使用以前下载的库工件(缓存在 ~/.gradle/caches)以在更短的时间内构建项目。
因此,在您的情况下,您需要通过在 Docker 容器中完全构建项目一次来创建构建运行器的 docker 映像。依赖项将被下载并缓存在文件系统中。然后您可以拉取该映像并再次将其用于后续构建,避免重新下载工件。
如果您更改项目中的 CUBA 平台版本,并且要避免为每个构建下载 cuba-*.jar 工件,则需要重新创建构建运行程序映像。