查看原文
其他

技术文档丨如何准备Bazel的依赖缓存目录

阿波君 Apollo开发者社区 2022-07-29


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



  ENJOY THE FOLLOWING  




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


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


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




1. 在Apollo容器中执行bazel version确定Bazel版本:


1$ bazel version
2Build label: 3.5.0
3Build target: bazel-out/aarch64-opt/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar
4Build time: Wed Sep 2 21:11:43 2020 (1599081103)
5Build timestamp: 1599081103
6Build timestamp as int1599081103

<左右滑动以查看完整代码>


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


2. 运行如下命令以下载对应的Bazel隐性依赖压缩包。


wget https://apollo-system.cdn.bcebos.com/archive/bazel_deps/bazel-dependencies-${BAZEL_VERSION}.tar.gz

<左右滑动以查看完整代码>


3. 将压缩包解压到由Apollo环境变量${APOLLO_BAZEL_DIST_DIR}指代的Bazel依赖缓存目录。


1tar xzf bazel-dependencies-${BAZEL_VERSION}.tar.gz
2source ${APOLLO_ROOT_DIR}/cyber/setup.bash
3mv bazel-dependencies-${BAZEL_VERSION}/* "${APOLLO_BAZEL_DIST_DIR}"

<左右滑动以查看完整代码>




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


1# 克隆对应分支的Bazel源码
2git clone --depth=1 -b "${BAZEL_VERSION}" https://github.com/bazelbuild/bazel bazel.git
3
4cd bazel.git
5
6# 构建对应的Bazel隐性依赖压缩文件
7bazel build @additional_distfiles//:archives.tar
8
9# 确保${APOLLO_BAZEL_DIST_DIR} 变量已定义,且对应的目录存在
10source ${APOLLO_ROOT_DIR}/cyber/setup.bash
11[[ -d "${APOLLO_BAZEL_DIST_DIR}" ]] || mkdir -p "${APOLLO_BAZEL_DIST_DIR}"
12
13# 将与该Bazel版本对应的各隐性依赖项全部解压到Bazel依赖缓存目录中
14tar xvf bazel-bin/external/additional_distfiles/archives.tar \
15-C "${APOLLO_BAZEL_DIST_DIR}" --strip-components=3

<左右滑动以查看完整代码>


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


*《Bazel官方指南:在封闭环境中运行Bazel》

https://docs.bazel.build/versions/master/guide.html#running-bazel-in-an-airgapped-environment


以上是"如何准备Bazel的依赖缓存目录"的全部内容,更多话题讨论、技术交流可以扫描下方二维码添加『Apollo小哥哥』为好友,进开发者交流群。






您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存