今天来开始学习Bazel这个工具,其实在Google等大公司都会推崇Bazel来作为自己项目构建以及测试的标准工具(标准玩法就是Monorepo+bazel+主干开发)
Bazel是什么
Bazel 是一个类似于 Make、Maven的开源构建和测试工具,支持多种语言多个平台构建输出。
优势:
- 高级构建语言:采用高语义来描述项目构建属性,和其他工具不同,Bazel是对
library、script、binary以及dataset进行操作,这样就不用去理解编译器/链接器的工具的复杂性 - 快速可靠:Bazel会缓存之前已经做的工作,并且会跟踪代码内容和构建命令的修改。这样的好处就可以并行构建/增量构建
- 多平台:支持mac/linux/windows
- 多语言:支持任何语言
- 多仓库:git、maven
Bazel使用
- 下载安装:https://bazel.google.cn/install
- 设置项目工作区:bazel构建输入以及构建输出的目录
- 编写bazel文件,声明式告诉bazel构建什么/怎么构建,采用Starlark语言来编写文件(一种python的子集),描述input artifacts、dependency、build rules(构建工具和配置)
- 运行bazel,生成的交付物会保留在工作区
Bazel构建过程
- 加载build与目标相关的文件
- 分析输入以及依赖关系,生成action graph
- 开始构建
这里所有之前被构建的工作都会被缓存下来,bazel可以识别并重用它们,从而可以进行快速的增量构建/增量测试
为什么需要一个构建系统build system
- 项目多语言:如果一个项目内有多个语言项目,那构建工作就不是一步可以完成,就需要一个系统自动化完成构建
- 如果发生灾难:即使恢复已有的数据,代码,但是有时候并不知道当时相关依赖的具体版本,需要有个工具记录起来
- 项目管理:如果项目有新人进来,都需要在新电脑上进行环境的搭建,但是经验来看肯定会有各种环境依赖问题,需要一个工具整理起来
- 构建过慢:需要有一种快速构建的方案来进行工程提效
- bazel应运而生