将Bazel添加到docker映像中



我们正在将一个现有的项目迁移到Bazel,我们面临着以下情况:

项目规模较大,希望逐步过渡;在这个逐渐过渡的过程中,我们的旧构建方法和Bazel都应该起作用;我们当前的系统从我们的项目中创建docker映像,然后在这些docker容器中运行测试和其他验证。因此,要添加Bazel,我们似乎必须能够在这些docker容器中运行Bazel。

是否有一种方法可以将Bazel添加到现有的docker文件中,这样我们就不需要下载我们不需要下载的组件,并且我们可以将生成的映像存储在我们公司的存储库中?

到目前为止,我已经看到了很多关于如何使用bazel构建docker映像的说明,我也找到了一个旧的bazel映像,其中有很多我们不需要的工具,并且存储库本身已经存档。

这样做是相当容易的。虽然你可以将安装说明复制粘贴到Ubuntu Docker文件中,但我强烈建议使用bazelisk。例如,像这样的东西应该工作(未经测试);

FROM ubuntu:20.04
# NOTE 'g++ unzip zip' are required by bazel
RUN apt update && apt install wget g++ unzip zip
RUN wget https://github.com/bazelbuild/bazelisk/releases/download/v1.15.0/bazelisk-linux-amd64 && 
chmod 755 bazelisk-linux-amd64 && 
mv bazelisk-linux-amd64 /usr/bin/bazelisk
# Download some of the other tools that you explicitly need...
RUN mkdir /workspace
WORKDIR /workspace
USER bazel
# other setup...

现在,为了充分利用bazelisk,您需要将文件.bazelversion添加到您的工作区。例如

6.0.0

现在当你运行bazelisk(例如bazelisk build //...从你的docker容器bazelisk将;

  • 下载并解压bazel版本6.0.0
  • 运行bazel 6.0.0并构建//...下的所有目标

注意:Bazel确实依赖于一些系统深度,这些深度不会在bazelisk安装中包含。但是您可以选择在bazel中可能使用的系统深度。

最新更新