【问题标题】:Docker caching of .m2 doesn't work locally.m2 的 Docker 缓存在本地不起作用
【发布时间】:2018-07-17 04:07:15
【问题描述】:

考虑一下.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

如果我像这样在本地运行它,我可以看到类似Successfully extracted cache 的消息,但随后它会重新下载所有 maven 依赖项,这在我的情况下意味着下载数百兆字节。

我看不出本地运行和远程运行之间的区别,我猜它们的工作方式应该一样?

这个缓存存储在哪里?我可以以某种方式验证确实存储了一些东西吗?

【问题讨论】:

    标签: docker gitlab gitlab-ci gitlab-ci-runner


    【解决方案1】:

    this issue 一样,您需要将 m2 缓存文件夹放入一个卷中,否则容器每次都会从头开始(空缓存),提示 maven 重新下载所有内容 .

    该问题也会报告,而不是使用卷:

    如果你将 repo 指向/cache 中的某个东西,则不需要指定cache.paths 的值;我目前实际使用的版本如下,我没有看到.m2 的“Removing..”行:

    image:
      maven:3.3.9-jdk-8
    
    variables:
      MAVEN_OPTS: -Dmaven.repo.local=/cache/maven.repository
    
    test:
      script: "mvn test" 
    

    但使用卷仍然是最便携的解决方案:

    我们编辑我们的配置以包含一个名为 host-cache 的本地 docker 主机卷,我们只需将上面的 /cache 引用替换为不依赖于任何未记录的运行器默认值的 /host-cache

    【讨论】:

    • 嗯,这是一个不同的解决方案,但这也适用于 gitlab 吗?挂载的卷需要存在,它可能不会存在?
    • @Vojtěch 是的,它会起作用:需要先创建主机文件夹(仅一次),但是一旦创建,它就可以作为卷挂载。
    猜你喜欢
    • 2020-12-05
    • 2020-12-21
    • 1970-01-01
    • 2013-06-06
    • 2019-02-02
    • 2022-08-18
    • 2017-11-09
    • 2017-04-04
    • 2016-04-25
    相关资源
    最近更新 更多