大佬们,用 k8s+Jenkins 去构建 Android 的话 gradle 缓存怎么搞?

2021-07-30 20:02:30 +08:00
 mio4kon
现在是 gradle home 的缓存放在 nfs 服务器上,然后 pod 挂载 gradle 缓存的 pvc,但是多个 pod 并行执行的话会有文件锁直接导致报错。

现在的想法是每次构建前把 nfs 的缓存目录 copy 到 pod 的 gradle home,但是 gradle home 太大了( 15g 左右),本机 cp 都要几分钟,影响构建时间,而且如何更新 gradle home 的内容也很麻烦

大佬们有没有好的解决方案?
2468 次点击
所在节点    Kubernetes
14 条回复
tanhui2333
2021-07-30 20:10:25 +08:00
如果非上 k8s,固定节点加 local 存储更合适吧
kwanzaa
2021-07-30 20:12:57 +08:00
文件变动之后 resync?
mio4kon
2021-07-30 20:15:43 +08:00
@tanhui2333 是的,如果没有好的方案只能固定节点数量了,不过每次构建可能就不是干净的容器了,构建脚本我们现在是暴露出去的,担心其他人乱改影响稳定性
mio4kon
2021-07-30 20:23:02 +08:00
@kwanzaa 相当于容器构建完了不能销毁,然后一直同步 gradle 缓存?
kwanzaa
2021-07-30 23:25:24 +08:00
@mio4kon 也可以将目录挂载到容器里面
Mystery0
2021-07-31 00:01:14 +08:00
一个项目一个缓存目录?
sampeng
2021-07-31 00:56:12 +08:00
java 项目。。而且你都 k8s+jenkins 了。说明有足够机器。你不内网做个仓库么?
内网有 gradle 仓库,完全不需要缓存。
gradle 缓存在 k8s+jenkins 方案里有各种奇怪的问题出现。比较折腾。
本来编译就慢,3 分钟和 3 分钟 30 秒。没什么太大感觉上的差异。。而且不用折腾。很舒服。。
sampeng
2021-07-31 00:58:23 +08:00
另外也不需要 copy 。gradle 有参数指定缓存目录。我第一个方案就是这样。但是不定期死锁。不要问我为什么。。。。用了半年我觉得有点崩溃。换一个。pod 不销毁。jenkins 的那个 pod 居然有大小限制。。多了就 disk full 。。。跑了 3 个月。。放弃。
现在这个方案最舒服。用完就销毁。啥都不耽误。半年没管过他。就老老实实打包就好了
xuanbg
2021-07-31 07:26:20 +08:00
私有仓库+私服就解决问题了。从私服拉依赖构建,构建完镜像 push 到私有仓库。至于你 k8s 怎么用私有仓库的镜像,就随意了。
mio4kon
2021-07-31 11:18:29 +08:00
@sampeng 是的,我现在用的就是参数指定目录,不过指定的是共享目录,所以会有死锁,你说的 gradle 仓库是指 maven center 吗?但是有些外网的依赖,虽然都换成阿里云镜像地址了,不过还是很慢
mio4kon
2021-07-31 11:21:19 +08:00
@xuanbg 是指每次构建完把容器重新打包上传个新镜像,然后每次构建拉新版本的镜像是吗
wdlth
2021-07-31 19:11:54 +08:00
内网没有搭建 Nexus 镜像么?
sampeng
2021-08-02 08:39:42 +08:00
@mio4kon Nexus 或者 jfrog 做内网镜像。非常快
mogging
2021-11-12 12:54:51 +08:00
gradlew + nexus + local volume pv 试试看

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

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

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

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

© 2021 V2EX