.m2的Docker缓存不';我不在本地工作
考虑一下.m2的Docker缓存不';我不在本地工作,docker,gitlab,gitlab-ci,gitlab-ci-runner,Docker,Gitlab,Gitlab Ci,Gitlab Ci Runner,考虑一下.gitlab ci.yml: variables: MAVEN_OPTS: "-Dmaven.repo.local=/root/.m2/repository" cache: key: "M2" paths: - /root/.m2/repository 当直接在gitlab中运行时,它可以正常工作,但当以以下方式运行时,它在本地不工作: gitlab-runner exec docker test 如果我像这样在本地运行它,我可以看到
.gitlab ci.yml
:
variables:
MAVEN_OPTS: "-Dmaven.repo.local=/root/.m2/repository"
cache:
key: "M2"
paths:
- /root/.m2/repository
当直接在gitlab中运行时,它可以正常工作,但当以以下方式运行时,它在本地不工作:
gitlab-runner exec docker test
如果我像这样在本地运行它,我可以看到类似成功提取缓存
这样的消息,但随后它会重新下载所有maven依赖项,在我的例子中,这意味着下载数百兆字节
我看不出本地运行和远程运行的区别,我想这两种方式应该是一样的吧
这个缓存存储在哪里?我是否可以验证是否确实存储了某些内容?如中所示,您需要将m2缓存文件夹放入卷中,否则每次容器都会从头开始(空缓存),提示maven重新下载所有内容
该问题还报告,而不是使用卷:
如果将repo指向/cache
中的某个对象,则不需要指定cache.path
值;我当前实际使用的版本如下所示,我没有看到.m2
的“删除..
”行:
但使用卷仍然是最便携的解决方案:
我们编辑配置以包含一个名为主机缓存
的本地docker主机卷,我们只需将上面的/cache
引用替换为/host cache
,它不依赖于任何未记录的运行程序默认值
这是一个不同的解决方案,但这在gitlab上也适用吗?装载的卷需要存在于那里,但它可能不会存在?@Vojtěch是的,它会工作:需要首先创建主机文件夹(仅一次),但一旦创建,它就可以作为卷装载。
image:
maven:3.3.9-jdk-8
variables:
MAVEN_OPTS: -Dmaven.repo.local=/cache/maven.repository
test:
script: "mvn test"