你如何在Docker中缓存gradle?

时间:2017-12-14 23:45:19

标签: docker gradle

我正在尝试缓存当前每次我的gradle构建下载的内容。为此,我尝试使用-v选项安装卷,如-v gradle_cache:/root/.gradle

事情是每次我使用exat相同的命令重新运行构建时它仍会再次下载所有内容。我用来运行图像的完整命令是

sudo docker run --rm -v gradle_cache:/root/.gradle -v "$PWD":/home/gradle/project -w /home/gradle/project gradle:jdk8-alpine gradle jar

我还检查了docker在/var/lib/docker/volumes/gradle_cache/_data保存卷内容的目录,但这也是空的。

my console log

我错过了什么使这个工作?

编辑:根据请求,我使用--scan选项重新运行命令。

还有一个不同的家庭:

$ sudo docker run --rm -v gradle_cache:/root/.gradle -v "$PWD":/home/gradle/project -w /home/gradle/project gradle:jdk8-alpine gradle jar --gradle-user-home /root/.gradle

FAILURE: Build failed with an exception.

* What went wrong:
Failed to load native library 'libnative-platform.so' for Linux amd64.

3 个答案:

答案 0 :(得分:2)

自 6.2.1 起,Gradle 现在支持此场景的共享、只读依赖项缓存:

<块引用>

在临时容器中运行构建是一种常见的做法。容器通常生成为仅在销毁之前执行单个构建。当构建依赖于每个容器必须重新下载的大量依赖项时,这可能会成为一个实际问题。为了帮助解决这种情况,Gradle 提供了几个选项:

  • 将依赖缓存复制到每个容器中

  • 在多个容器之间共享一个只读的依赖缓存

https://docs.gradle.org/current/userguide/dependency_resolution.html#sub:ephemeral-ci-cache 描述了创建和使用共享缓存的步骤。

答案 1 :(得分:1)

或者,要对缓存目录进行更多控制,可以使用以下方法:

ENV GRADLE_USER_HOME /path/to/custom/cache/dir
VOLUME $GRADLE_USER_HOME

答案 2 :(得分:0)

查看我发现的正在使用的容器的Dockerfile后,正确使用的选项是-v gradle_cache:/home/gradle/.gradle

让我觉得文件缓存在/root/.gradle中的原因是Dockerfile还将其设置为来自/home/gradle/.gradle的符号链接:

ln -s /home/gradle/.gradle /root/.gradle

因此,在构建之后检查文件系统会使文件存储在那里。