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

Bal*_*nat 7 gradle gitlab-ci

我的项目是用gradlew. GitLab CI 使用官方 Gradle 镜像在 docker runner 中构建项目(请参阅https://hub.docker.com/_/gradle)。

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

我如何“告诉”包装器有关已安装的发行版的信息,以便它不会重新下载它(当然假设版本匹配)?

当然,替代方案是使用gradle而不是gradlew在 CI 中使用,并依赖 docker 映像来获得正确的发行版,但如果可能的话,我想避免这种情况,因为这样我就必须手动保持.gitlab-ci.yml包装器配置同步。

Bjø*_*ter 1

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

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

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