V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lawsiki
V2EX  ›  程序员

Jenkins 中 Docker 分层构建缓存无效问题如何解决?

  •  
  •   lawsiki · 2020-09-10 11:40:39 +08:00 · 1207 次点击
    这是一个创建于 1314 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景:

    • 本机 macOS,docker 版本:Docker version 19.03.8, build afacb8b
    • jenkins 构建服务器 CentOS,docker 版本:Docker version 19.03.12, build 48a66213fe

    Jenkins 构建的流程是

    • 构建流程使用 Jenkins 的 pipline
    • 使用 jenkins 自带的 git 命令拉取指定分支
    • maven 打包 jar
    • 构建 docker 镜像
    • 推送 docker 镜像运行

    刚开始使用的是 springboot 的 fatjar,问题就是每次构建推送的时候都要重新打包 100 多 M,很费时

    现在想使用 docker 分层镜像缓存的原理,将 maven 构建拆分为 lib 和 app.jar ,这样每次构建只需要几百 k 就够了,本地测试都正常,没有更改依赖的时候,第二次构建都是瞬间完成

    但是放到 Jenkins 上跑的时候,发现 14,15 行两个命令并没有走缓存,请问有人碰到过吗?

    Dockerfile

    Jenkins 的 git 更新日志

    Jenkins 构建日志

    本地构建日志

    Aliencn
        1
    Aliencn  
       2020-09-10 12:05:46 +08:00
    感觉像是有些操作修改了原文件的时间戳,让 docker 认为这是新文件就放弃使用缓存了。
    lawsiki
        2
    lawsiki  
    OP
       2020-09-10 12:09:33 +08:00
    @Aliencn #1 查过好像是 git checkout 的时候修改文件时间了,但是我尝试 使用 find ./ | grep -v .git | xargs touch -t 200001010000.00 修改文件时间后还是一样的问题
    calmzhu
        3
    calmzhu  
       2020-09-10 13:04:41 +08:00
    看下 jenkinsFile 文件

    然后在 dockerbuild 之前将 target/lib 考到第三方目录。用 hash 比对一下两次之间的文件看看

    然后用 Jenkins 时 建议不要管本地过不过。Jenkins 跟本地环境可以差非常多。除非对某个步骤依赖的环境极为清楚。看本地反而限制自己排查问题
    lawsiki
        4
    lawsiki  
    OP
       2020-09-10 16:25:36 +08:00
    @calmzhu #3 恩,之前陷入误区了,一直以为是 git 的问题,排除法尝试后发现是在模块依赖了另一个 common 模块,而 common 模块每次都会 install,所以 lib 就无法缓存了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   950 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 20:42 · PVG 04:42 · LAX 13:42 · JFK 16:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.