基于RBE的C/C++大型Bazel项目:多机Buildfarm Worker配置咨询
多机器配置Buildfarm Worker实现远程构建执行方案
一、前置准备
- 确保所有Worker机器能访问Buildfarm服务端的8980端口(作业调度)和8080端口(监控),提前开放防火墙/安全组规则。
- 所有机器安装JDK11+、与项目匹配版本的Bazel,以及C/C++编译依赖(如gcc、glibc、cmake等,需和项目构建环境完全一致)。
- 下载与服务端同版本的Buildfarm二进制包,或从官方仓库源码编译生成
buildfarm-worker.jar。
二、单Worker机器配置步骤
- 创建Worker配置文件
在Worker机器上新建worker.config,核心配置示例如下(根据实际环境调整):
worker: server: grpc://<服务端IP>:8980 # 替换为你的Buildfarm服务端IP root: /var/buildfarm/worker # Worker工作根目录,需提前创建并赋予读写权限 cas: directory: /var/buildfarm/cas # CAS缓存目录,用于存储构建产物 maxSizeBytes: 10737418240 # CAS最大缓存容量,示例为10GB executor: path: /usr/bin/bazel # 本地Bazel执行路径 properties: - "os=linux" - "architecture=amd64" - "c++-toolchain=gcc-11" # 匹配项目的编译工具链属性,服务端将据此分配对应任务 cores: 8 # Worker可用CPU核心数,按需设置 memoryLimitBytes: 32212254720 # Worker可用内存上限,示例为30GB
- 启动Worker进程
用以下命令后台启动Worker(推荐配置systemd服务实现开机自启):
nohup java -jar buildfarm-worker.jar --config worker.config &
验证启动:访问服务端监控页面http://<服务端IP>:8080,在Worker列表中能看到该机器信息即为成功。
三、多Worker批量部署
如果有大量Worker机器,可通过Ansible、SaltStack等自动化工具批量操作:
- 批量推送
worker.config配置文件到所有Worker机器 - 批量创建工作目录并设置权限
- 批量启动Worker进程并配置服务自启
四、服务端配置调整(可选)
若服务端默认调度策略不满足需求,修改服务端server.config调整调度规则:
server: scheduler: policy: least-loaded # 可选round-robin/least-loaded,前者轮询分配,后者优先分配给负载低的Worker maxQueueSize: 1000 # 最大等待队列长度
修改后重启服务端生效。
五、项目验证
在项目开发机器上执行远程构建命令,指定Buildfarm服务端:
bazel build //... --remote_executor=grpc://<服务端IP>:8980
通过服务端监控页面查看任务分配状态,确认多Worker均在接收并执行构建任务即可。
配置参考资料
- Buildfarm核心配置说明:包含Worker的CAS缓存、Executor属性、资源限制等所有可配置项的详细解释
- Buildfarm调度策略文档:介绍不同调度策略的适用场景与配置方式
- Bazel RBE适配指南:讲解如何配置项目工具链、缓存策略以匹配Buildfarm远程执行环境
内容的提问来源于stack exchange,提问作者Penugonda chenna reddy
相关产品推荐
相关产品推荐

