在Gradle docker映像中运行时,如何避免Gradle包装下载发行版?

在Gradle docker映像中运行时,如何避免Gradle包装下载发行版?,gradle,gitlab-ci,Gradle,Gitlab Ci,我的项目是用gradlew构建的。GitLab CI在docker runner中使用官方Gradle图像构建项目(请参阅) 现在,即使Gradle已经安装在cointainer中,包装器仍然会每次下载发行版。这占了构建时间的大部分 我如何“告诉”包装器已经安装的发行版,这样它就不会重新下载它(当然假设版本匹配) 当然,另一种选择是在CI中使用gradle而不是gradlew,并依靠docker映像获得正确的发行版,但如果可能的话,我希望避免这种情况,因为我必须手动保持.gitlab ci.ym

我的项目是用
gradlew
构建的。GitLab CI在docker runner中使用官方Gradle图像构建项目(请参阅)

现在,即使Gradle已经安装在cointainer中,包装器仍然会每次下载发行版。这占了构建时间的大部分

我如何“告诉”包装器已经安装的发行版,这样它就不会重新下载它(当然假设版本匹配)


当然,另一种选择是在CI中使用
gradle
而不是
gradlew
,并依靠docker映像获得正确的发行版,但如果可能的话,我希望避免这种情况,因为我必须手动保持
.gitlab ci.yml
和包装器配置同步。

我认为您不能指示包装器使用手动安装的本地版本的Gradle

我能想到的防止在每次构建时下载发行版的唯一方法是缓存Gradle主文件夹(例如/home/Gradle/.Gradle),这在升级Gradle时不需要额外的步骤。即使它驻留在Docker容器中,这也应该是可能的


我不知道GitLab如何支持缓存的细节,但只有当缓存存储在本地(在同一台机器上或在具有高网络带宽的缓存服务器上)时,它才有意义。如果必须在每次构建时从S3存储桶之类的东西上传和下载,那么可能需要与从services.gradle.org下载一样多的时间。但是如果你能做到这一点,你将不仅缓存Gradle分发版,而且缓存构建依赖项,这将进一步加快构建速度。

我也有这个想法,但发现状态“你只能缓存项目工作区内的路径”。不确定这是否包括用户主目录。我尝试将
gradlew\u USER\u HOME
设置为
/.GRADLE
,但由于某种原因,这导致
gradlew
在下载发行版时遇到了问题。仍然不确定原因-必须进一步调查。哦,根据docker卷的物理位置,我希望缓存仍然可以提高性能,例如,如果它们与缓存位于同一数据中心。已经有一个具有不同内容的。/.gradle文件夹,但您可以将其设置为类似于/.gradle_home的任何其他值。我用GitLab的变量尝试了它,但没有成功。使用示例中的
export
似乎可以做到这一点。哈哈,我刚刚意识到你就是这个家伙:小世界。。。