Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.m2的Docker缓存不';我不在本地工作_Docker_Gitlab_Gitlab Ci_Gitlab Ci Runner - Fatal编程技术网

.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"