使用Git工作树时高效构建Bazel的最佳实践



我使用了" worktrees"git管理我的仓库分支的功能。这意味着每个活动分支都位于自己的目录中,并且通过切换目录来完成切换分支。

不幸的是,这似乎与bazel交互不好。即使使用共享磁盘缓存,我发现bazel也会从我的WORKSPACE文件中为每个工作树目录重新下载远程存储库(可能是因为远程操作)。其中一些非常大,读取速度很慢。(我可以安装一个squid代理,但我觉得bazel的缓存应该足够了)。

我已经发现了这个讨论,但是没有解决方案。

我相信其他用户正在使用bazel和git工作树解决方案。其他用户可以提供什么建议?其他用户发现了哪些bazel配置可以改善这种情况?

对于不同的分支,共享一个输出基就可以了。将——output_base设置为某个共享文件夹,如bazel --output_base=my_output_base build //...。您可以通过在适用的bazelrc中添加像startup --output_base=my_output_base这样的行来使其自动执行。

请注意,这将防止在不同文件夹中并发构建。它们将排队,一次运行一个。

使用远程构建缓存

你可以通过:

启动你自己的本地instance_
sudo docker run -u 1000:1000 -v ~/bazel_remote_cache:/data                        
-p 9090:8080 -p 9092:9092 buchgr/bazel-remote-cache

你可以设置一个home RC文件(.bazelrc)来使用远程构建缓存:

cd ~
echo "build --remote_cache=http://localhost:9090" >> .bazelrc

如果你现在构建一个远程缓存被使用。

切换分支时,应该已经缓存了很多东西。根据我的经验,远程缓存在这里比本地缓存工作得更好。

最新更新