您可以从脚本调用 Bazel 以执行构建、运行测试或查询 依赖关系图Bazel 的设计初衷就是支持编写有效的脚本 本部分列出了需要注意的一些细节,可让您的脚本 稳健。
选择输出基准
--output_base
选项控制 Bazel 进程应在何处写入
以及供内部使用的各种工作文件
Bazel,其中一个是锁,用于防止
根据多个 Bazel 进程的输出
为脚本选择正确的输出基本目录取决于
因素。如果您需要将构建输出放在特定位置
规定需要使用的输出库。如果您将作业设为“只读”调用
Bazel(例如 bazel query
),锁定因素会更为重要。在
特别是,如果您需要同时运行脚本的多个实例,
请注意,每个 Blaze 服务器进程最多只能处理一个
一次调用。
根据您的具体情况,它可能适合脚本的每个实例。
等待轮到它,或者使用 --output_base
运行多个
Blaze 服务器,然后使用这些服务器。
如果您使用默认的输出基数值, 所有交互式 Bazel 命令使用的锁。如果用户发起 长时间运行的命令(如构建命令),则您的脚本必须等待这些命令 然后才能继续
有关服务器模式的注意事项
默认情况下,Bazel 使用长时间运行的服务器进程作为
优化。在脚本中运行 Bazel 时,别忘了调用 shutdown
或者,您也可以指定 --max_idle_secs=5
,
空闲服务器会立即自动关闭。
我将获得什么退出代码?
Bazel 会尝试区分 考虑阻止 Bazel 正常运行的外部错误。 Bazel 执行可能会导致以下退出代码:
所有命令通用的退出代码:
0
- 成功2
- 命令行问题、错误或非法的标志或命令组合,或者 错误的环境变量。必须修改命令行。8
- 构建中断,但我们终止了实例,并按顺序关停。9
- 已持有服务器锁定,并且传递了--noblock_for_lock
。32
- 此机器上不存在外部环境故障。33
- Bazel 内存不足并崩溃。您需要修改命令行。34
- 留给 Google 内部使用。35
- 留给 Google 内部使用。36
- 本地环境问题,疑似是永久性的。37
- 未处理的异常 / 内部 Bazel 错误。38
- 将结果发布到构建事件服务时出现暂时性错误。39
- 从远程缓存中逐出 Bazel 所需的 Blob。41-44
- 留给 Google 内部使用。45
- 将结果发布到构建事件服务时出现持续错误。47
- 留给 Google 内部使用。49
- 留给 Google 内部使用。
返回命令 bazel build
、bazel test
的代码:
1
- 构建失败。3
- 构建正常,但部分测试失败或超时。4
- 构建成功,但未找到测试,尽管测试 请求。
对于 bazel run
:
1
- 构建失败。- 如果构建成功,但执行的子进程返回非零退出 它也将是命令的退出代码。
对于 bazel query
:
3
- 部分成功,但查询在 输入 BUILD 文件集,因此操作结果不是 100% 可靠性。这可能是由于命令行中的--keep_going
选项造成的。7
- 命令失败。
未来的 Bazel 版本可能会添加其他退出代码,以取代常规失败
具有特定含义的其他非零值退出代码 1
。
不过,所有非零退出值始终都会构成错误。
读取 .bazelrc 文件
默认情况下,Bazel 会从以下目录读取 .bazelrc
文件:
工作区目录或用户的主目录。无论
为您的脚本选择最合适的值必须确保脚本
封闭式(例如在进行发布构建时),因此您应该停止读取
.bazelrc 文件。--bazelrc=/dev/null
如果您想执行
使用用户的偏好设置的 build 时,默认行为会更好。
命令日志
Bazel 输出也可以在命令日志文件中找到,您可以使用 以下命令:
bazel info command_log
命令日志文件包含
运行最新 Bazel 命令请注意,运行 bazel info
会覆盖
此文件的内容,因为这样它就会成为最新的 Bazel 命令。
但是,除非您将命令日志文件
--output_base
或 --output_user_root
选项的设置。
解析输出
Bazel 输出易于解析,可用于多种用途。
对脚本有帮助的 --noshow_progress
会抑制进度
还有 --show_result n
,后者用于控制
而不是“构建最新版本”输出消息;这些消息可能会被解析为
了解成功构建的目标以及输出的位置
文件。如果您依赖于
这些消息
通过分析排查性能问题
请参阅性能剖析部分。