如何与docker容器共享gradlecaching

我们在Docker容器中运行gradle构build(其原因是构build需要我们不希望在主机上安装的软件;节点,酒等等,甚至不在主机上安装java或gradle)。

用一个空的caching启动每个容器是很慢的。

我已经build立了gradle-4.0的http生成caching。 这在大多数情况下避免了Java编译的需要。 性能增益虽然相当低,因为构build时间主要由下载依赖关系决定gradlew --parallel有助于缓解这一点,但要真正推动构build,下载应该完全避免。

将〜/ .gradle共享为Docker卷是有问题的,因为当容器并行运行时会导致争用( https://github.com/gradle/gradle/issues/851 )。

那么,还有什么可以做,以避免一遍又一遍下载相同的文物?

您可以构build包含caching的泊坞窗图像,然后使用此图像运行build筑容器。

虽然从并行运行的容器中共享gradlecaching是有问题的,但是在容器顺序运行时重用gradlecaching是完全可以的。 由jenkins按顺序运行的构build。

Jenkins版本可以通过使用.gradle文件夹的docker卷加快。 唯一的缺点是,每个工作都需要自己的音量。