Skip to content

Latest commit

 

History

History
73 lines (52 loc) · 3.17 KB

how_to_prepare_bazel_dist_dir_cn.md

File metadata and controls

73 lines (52 loc) · 3.17 KB

如何准备 Bazel 的依赖缓存目录

本文档描述了在 Apollo 项目中准备 Bazel 的依赖缓存目录 (Distribution Directory, 参考链接) 的方法。

Introduction

根据Bazel 官方指南:在封闭环境中运行 Bazel 的说明,Bazel 的隐性依赖项是在 Bazel 初次运行的时候从网络上拉取的。然而,即使所有在 WORKSPACE 中指定的依赖项均已到位,这在封闭环境或者网络连接不稳定的状况下依然会造成问题。

为解决这一问题,进一步便利国内开发者,Apollo 团队决定从今日起,对 Apollo 中用到 的所有 Bazel 二进制版本,均提与之对应的 Bazel 隐性依赖压缩包文件。请注意,由于对 不同版本的 Bazel 二进制来说,其隐性依赖项也有可能不同。因此,当 Bazel 二进制版本更新后,请务必重新按照本文档的描述方法,重新执行一次。

在接下来的小节中,我们将会熟悉把 Apollo 提供的压缩包解压到 Bazel 的依赖缓存目录的流程。

利用 Apollo 提供的 Bazel 隐性依赖压缩包

  1. 在 Apollo 容器中执行bazel version确定 Bazel 版本:
$ bazel version
Build label: 3.5.0
Build target: bazel-out/aarch64-opt/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar
Build time: Wed Sep 2 21:11:43 2020 (1599081103)
Build timestamp: 1599081103
Build timestamp as int: 1599081103

在本示例中的 Bazel 版本为3.5.0。在以下行文中,我们将以BAZEL_VERSION指代之。

  1. 运行如下命令以下载对应的 Bazel 隐性依赖压缩包
wget https://apollo-system.cdn.bcebos.com/archive/bazel_deps/bazel-dependencies-${BAZEL_VERSION}.tar.gz
  1. 将压缩包解压到由 Apollo 环境变量${APOLLO_BAZEL_DIST_DIR}指代的 Bazel 依赖缓存目录
tar xzf bazel-dependencies-${BAZEL_VERSION}.tar.gz
source ${APOLLO_ROOT_DIR}/cyber/setup.bash
mv bazel-dependencies-${BAZEL_VERSION}/* "${APOLLO_BAZEL_DIST_DIR}"

自己动手构建Bazel 的隐性依赖项的方法

如果您需要的 Bazel 版本 Apollo 未能提供,除了在 GitHub 提交 issue 反馈外, 您还可以通过如下方法在一台网络连接良好的机器上自己动手构建:

# 克隆对应分支的Bazel源码
git clone --depth=1 -b "${BAZEL_VERSION}" https://github.com/bazelbuild/bazel bazel.git

cd bazel.git

# 构建对应的Bazel隐性依赖压缩文件
bazel build @additional_distfiles//:archives.tar

# 确保${APOLLO_BAZEL_DIST_DIR} 变量已定义,且对应的目录存在
source ${APOLLO_ROOT_DIR}/cyber/setup.bash
[[ -d "${APOLLO_BAZEL_DIST_DIR}" ]] || mkdir -p "${APOLLO_BAZEL_DIST_DIR}"

# 将与该Bazel版本对应的各隐性依赖项全部解压到Bazel依赖缓存目录中
tar xvf bazel-bin/external/additional_distfiles/archives.tar \
  -C "${APOLLO_BAZEL_DIST_DIR}" --strip-components=3

然后,你就可以在 Apollo 容器中顺利执行./apollo.sh build./apollo.sh test 等命令而无需担心依赖项拉不下来的问题了。