浏览 Bazel 的大量命令行标志可能是一项挑战。 本页重点介绍您需要了解的最关键标志。
实用的常规选项
以下标志需要在命令行中明确设置。
| 标志 | 说明 |
|---|---|
|
您可以将 .bazelrc 文件中的标志整理到配置中,
例如用于调试或发布 build 的配置。您可以使用
选择其他配置组--config=<group>。
|
|
Bazel 应尽可能继续执行 build 和测试。 默认情况下,Bazel 会尽早失败。 |
|
使用远程执行或缓存(磁盘和远程)时,您可以向
Bazel 发出信号,表明您
想要下载 所有 (中间)构建工件,如下所示:
--remote_download_outputs=all |
|
向二进制文件添加 build 信息(用户、时间戳)。 |
发现 build 和测试问题
以下标志可帮助您更好地了解 Bazel build 或测试错误。
| 标志 | 说明 |
|---|---|
|
显示通过用户定义、 机器定义或项目定义的 .bazelrc 文件隐式设置的标志。 |
|
默认情况下,Bazel 会尝试阻止日志垃圾内容,并且仅针对在命令行中请求的软件包和子软件包输出编译器
警告和 Starlark 调试输出。如需停用所有过滤,请设置
--auto_output_filter=none.
|
|
让您可以深入了解沙盒错误。如需详细了解 Bazel 默认对 build 进行沙盒处理的原因以及沙盒处理的内容,请参阅我们的沙盒文档。 |
|
显示 Bazel 在 build 期间运行的每个命令的完整列表, 无论命令是成功还是失败 |
启动
| 标志 | 说明 |
|---|---|
|
您可以在 .bazelrc 文件中指定默认 Bazel 选项。如果存在
多个 .bazelrc 文件,您可以通过添加 --bazelrc=<path to
the .bazelrc file> 来选择要使用的
.bazelrc 文件。
|
|
限制 Bazel 服务器使用的 RAM 量。
例如,以下命令将 Bazel 堆大小限制为 3GB:
--host_jvm_args=-Xmx3g |
|
控制 Bazel 的输出树。Bazel 不会将 build 输出(包括日志)存储在源代码树本身中。 而是使用不同的输出树来实现此 目的。 |
Bazel 测试
以下标志与 Bazel 测试相关
| 标志 | 说明 |
|---|---|
|
使 Java 测试在执行之前等待调试器连接。 |
|
运行测试的次数。例如,如需运行测试 N 次,请添加
--runs_per_test=N。这有助于调试
不稳定的测试,并查看修复是否会导致测试始终通过。
|
|
指定输出模式。默认情况下,Bazel 会在
本地日志文件中捕获测试输出。在迭代失败的测试时,您通常需要使用
--test_output=streamed来实时查看测试输出。
|
Bazel 运行
以下标志与 Bazel 运行相关。
| 标志 | 说明 |
|---|---|
|
更改可执行文件的调用方式。例如,--run_under="strace -c" 通常用于调试。 |
用户专用的 bazelrc 选项
以下标志与用户专用的 .bazelrc 选项相关。
| 标志 | 说明 |
|---|---|
|
Bazel 可读取和写入操作及操作输出的目录的路径。
如果该目录不存在,系统会创建该目录。
您可以在多个分支或工作区之间共享 build 工件,并通过添加
加快 Bazel build 速度
--disk_cache=<path>到您的命令。
|
|
要运行的并发作业数。 这通常仅在使用远程执行时需要,因为远程 build 集群执行的作业数比您在本地拥有的核心数多。 |
|
限制本地运行的操作占用的 CPU 或 RAM 量。 |
|
让沙盒在此路径下创建其沙盒目录。默认情况下,Bazel 会对本地操作进行沙盒处理,这会增加 build 的开销。 |
项目专用的 bazelrc 选项
以下标志与项目专用的 .bazelrc 选项相关。
| 标志 | 说明 |
|---|---|
|
如果任何 测试失败,请重试每个测试,重试次数上限为指定次数。这在持续集成中尤其有用。需要多次尝试才能通过的测试在测试摘要中标记为 FLAKY 。 |
|
缓存端点的 URI。设置远程缓存是加快 Bazel build 速度的绝佳方式。它可以与本地磁盘缓存结合使用。 |
|
强制下载路径与此模式匹配的远程 build 输出,
无论 --remote_download_outputs 设置如何。您可以通过重复此标志来指定多个模式。
|
|
HOST 或 HOST:PORT 的远程执行端点。如果您使用的是
远程执行服务,请传递此标志。您通常需要添加
--remote_instance_name=<name>。
|
|
要在远程执行 API 中作为 instance_name 传递的值。
|
|
如果指定了此标志,系统会在 Bazel 生成的每条消息中添加时间戳,以指定 显示消息的时间。这在 CI 系统中非常有用,可让您 快速了解哪个步骤花费了多长时间。 |
|
即使使用远程执行,在本地运行某些 build 操作也可能会更快。 这取决于 build 集群的容量、网速和 网络延迟等因素。 |