对于远程执行,我们则必须需要关注这些操作所在的执行平台。我们需要在不同的平台上使用远程工作器(remote workers)来执行这些操作(actions),这也就意味着,我们需要一个可以同时支持 MacOS、Windows 和 Linux 的远程服务器。
大多数 Bazel 用户都来自互联网行业,而 Linux 是目前互联网开发环境中最常用的系统。因此,目前大多数远程服务器都支持 Linux。由于 MacOS 平台也常常用于构建 IOS 应用程序,因此有的远程服务器也支持 MacOS 。但对于 Window 平台,我们就没有那么幸运了。Bazel 在 Windows 上的应用相对不多,远程执行则被使用得更少了。
我们尝试了使用 Buildbarn,一个用 Go 语言编写的开源远程服务器。
Buildbarn 的一个优点是,它可以支持多种类型的工作器。它在 Linux 上使用基于 FUSE(Filesystem in Userspace) 的工作器,在 MacOS 上则是基于 NFSv4(Network File System version 4)的工作器。两者都使用的是虚拟文件系统(VFS)。
不幸的是,Buildbarn 在 Windows 上并没有基于VFS的工作器。Windows本身有一个很不错的 VFS API 叫 ProjFS。微软用其实现了GitVFS 。但由于 Windows 不是 Web 行业开发中最常用的构建环境,因此Buildbarn 在 Windows 上没有相应的可用实现。