You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bazel是否支持缓存编译与测试失败结果?

好问题!你提到的这个痛点确实在大型代码库中很常见——Bazel默认只缓存成功的构建/测试结果,失败的任务会重复执行,白白浪费时间。不过幸运的是,Bazel其实支持缓存失败的构建和测试结果,只需要简单配置就能开启这个功能。

如何开启失败结果缓存

你可以通过两种方式来启用这个特性:

1. 命令行临时启用

每次运行Bazel命令时,加上--cache_failed_actions参数即可。比如:

  • 构建时:bazel build --cache_failed_actions //...
  • 测试时:bazel test --cache_failed_actions //...:all

这个参数会让Bazel把失败的动作(不管是编译还是测试)的结果缓存起来,当后续执行相同的任务(输入和依赖完全没变)时,直接返回之前的失败结果,不会重新执行。

2. 配置文件永久启用

如果你不想每次都加命令行参数,可以把这个配置写到项目根目录的.bazelrc文件里,这样所有Bazel命令都会自动生效:

build --cache_failed_actions
test --cache_failed_actions
针对你场景的效果验证

比如你说的测试场景:100个测试里4个失败,修复其中一个后重新跑bazel test //...:all——开启失败缓存后,另外3个没有修改依赖的失败测试,Bazel会直接读取缓存的失败结果,不会再重新执行,你只需要等待修复后的那个测试跑完就行,时间直接节省一大半。

编译场景同理:如果某次构建因为特定文件的错误失败,只要你没修改相关文件,重新构建时Bazel会直接返回缓存的失败结果,不会再花几分钟重复执行那次失败的编译。

注意事项
  • 这个缓存是基于输入和依赖的哈希值的,只要你的代码、依赖或者构建配置有任何变化,Bazel就会重新执行任务,不会误用旧的失败缓存。
  • 失败缓存和成功缓存共用Bazel的缓存系统,不管是本地缓存还是远程缓存,都能支持这个特性。

内容的提问来源于stack exchange,提问作者rabensky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 22:27:37