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

2020-09-10 11:40:39 +08:00
 lawsiki

背景:

Jenkins 构建的流程是

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

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

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

Dockerfile

Jenkins 的 git 更新日志

Jenkins 构建日志

本地构建日志

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

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

然后用 Jenkins 时 建议不要管本地过不过。Jenkins 跟本地环境可以差非常多。除非对某个步骤依赖的环境极为清楚。看本地反而限制自己排查问题
lawsiki
2020-09-10 16:25:36 +08:00
@calmzhu #3 恩,之前陷入误区了,一直以为是 git 的问题,排除法尝试后发现是在模块依赖了另一个 common 模块,而 common 模块每次都会 install,所以 lib 就无法缓存了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/705751

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX