bazel使用中存在的问题

只开远端缓存时。kernel采用的bazel编译,遇到如下问题:

1、Action 详情二进制文件解析为文本文件时报错,无法进一步比较分析导致缓存不命中的原因。--- JDK版本的问题

2、远端缓存全部命中时间收益不明显 ---需分析是否为网络原因

3、$HOME/.bazelrc中指定分析日志保存文件用于分析。 但由于无法指定相对路径,同一工程中全部bazel分析结果都保存在kernel根路径下,造成覆盖。无法批量分析

4、提取kernel中的bazel命令,本地重复编译两次,第二次可以全部命中本地缓存,秒级构建。但清理本地缓存,只使用远端缓存,本地重复编译两次,第二次无法全部远端缓存。---分析构建的action日志文件, 没命中的基本含有inputs bazel-out/volatile-status.txt文件差异, 其内容是时间戳,但按bazel官方说明,该文件是易变文件,不影响的action的,说明见https://bazel.build/docs/user-manual?hl=zh-cn#workspace-status。经过改造bazel源码,固定volatile-status.txt中内容,再次测试验证发现volatile-status.txt不变后,全部命中,说明volatile-status.txt影响远端缓存,具体正式方案如何优化或规避此种情况,待定。

volatile-status.txt和stable-status.txt是bazel自动生成的,在bazel-out目录下

其次,目前CI构建基本采用docker随机申请机器,stable-status.txt稳定文件包含运行 Bazel 的主机的名称等,这些也会变化,导致远端缓存不会全部命中

bazel源码安装教程:从源代码编译 Bazel

改造的文件在GitHub - bazelbuild/bazel: a fast, scalable, multi-language and extensible build systemsrc/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java,将其中stableMap和volatileMap 中需固定的值强制写为固定值即可。

如volatileMap.put(
          BuildInfo.BUILD_TIMESTAMP, Long.toString(getCurrentTimeMillis(clientEnv) / 1000));

改为

volatileMap.put(BuildInfo.BUILD_TIMESTAMP, ''1111111111");

本文属于如下文章中的子章节

bazel学习系列章节汇总_m0_74043383的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_74043383

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值