Làm quen với vùng chứa Bazel Docker

Báo cáo sự cố Xem nguồn

Trang này cung cấp thông tin chi tiết về nội dung của vùng chứa Bazel, cách tạo dự án abseil-cpp bằng Bazel bên trong vùng chứa Bazel, và cách tạo dự án này trực tiếp từ máy chủ lưu trữ bằng cách sử dụng vùng chứa Bazel có gắn thư mục.

Tạo dự án Abseil từ máy chủ lưu trữ có gắn thư mục

Hướng dẫn trong phần này cho phép bạn tạo bản dựng bằng vùng chứa Bazel với các nguồn được thanh toán trong môi trường lưu trữ. Một vùng chứa được khởi động cho mỗi lệnh tạo bản dựng mà bạn thực thi. Kết quả bản dựng được lưu vào bộ nhớ đệm trong môi trường lưu trữ của bạn để có thể sử dụng lại trên các bản dựng.

Sao chép dự án vào một thư mục trong máy chủ.

git clone --depth 1 --branch 20220623.1 https://github.com/abseil/abseil-cpp.git /src/workspace

Tạo một thư mục có kết quả được lưu vào bộ nhớ đệm để chia sẻ giữa các bản dựng.

mkdir -p /tmp/build_output/

Sử dụng vùng chứa Bazel để tạo dự án và cung cấp các đầu ra của bản dựng ở thư mục đầu ra trong máy chủ lưu trữ.

docker run \
  -e USER="$(id -u)" \
  -u="$(id -u)" \
  -v /src/workspace:/src/workspace \
  -v /tmp/build_output:/tmp/build_output \
  -w /src/workspace \
  gcr.io/bazel-public/bazel:latest \
  --output_user_root=/tmp/build_output \
  build //absl/...

Xây dựng dự án bằng các trình dọn dẹp bằng cách thêm cờ bản dựng --config=asan|tsan|msan để chọn AddressSanitizer (asan), ThreadSanitizer (tsan) hoặc MemorySanitizer (msan) tương ứng.

docker run \
  -e USER="$(id -u)" \
  -u="$(id -u)" \
  -v /src/workspace:/src/workspace \
  -v /tmp/build_output:/tmp/build_output \
  -w /src/workspace \
  gcr.io/bazel-public/bazel:latest \
  --output_user_root=/tmp/build_output \
  build --config={asan | tsan | msan} -- //absl/... -//absl/types:variant_test

Tạo dự án Abseil từ bên trong vùng chứa

Hướng dẫn trong phần này cho phép bạn tạo bằng cách sử dụng vùng chứa Bazel với các nguồn bên trong vùng chứa. Bằng cách bắt đầu một vùng chứa ở đầu quy trình phát triển và thực hiện các thay đổi trong vùng chứa bên trong vùng chứa, kết quả bản dựng sẽ được lưu vào bộ nhớ đệm.

Bắt đầu một shell trong vùng chứa Bazel:

docker run --interactive --entrypoint=/bin/bash gcr.io/bazel-public/bazel:latest

Mỗi mã vùng chứa là duy nhất. Theo hướng dẫn dưới đây, vùng chứa là 5a99103747c6.

Sao chép dự án.

ubuntu@5a99103747c6:~$ git clone --depth 1 --branch 20220623.1 https://github.com/abseil/abseil-cpp.git && cd abseil-cpp/

Xây dựng bản dựng bình thường.

ubuntu@5a99103747c6:~/abseil-cpp$ bazel build //absl/...

Xây dựng dự án bằng các trình dọn dẹp bằng cách thêm cờ bản dựng --config=asan|tsan|msan để chọn AddressSanitizer (asan), ThreadSanitizer (tsan) hoặc MemorySanitizer (msan) tương ứng.

ubuntu@5a99103747c6:~/abseil-cpp$ bazel build --config={asan | tsan | msan} -- //absl/... -//absl/types:variant_test

Khám phá vùng chứa Bazel

Nếu bạn chưa bật, hãy bắt đầu một shell tương tác bên trong vùng chứa Bazel.

docker run -it --entrypoint=/bin/bash gcr.io/bazel-public/bazel:latest
ubuntu@5a99103747c6:~$

Khám phá nội dung vùng chứa.

ubuntu@5a99103747c6:~$ gcc --version
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
ubuntu@5a99103747c6:~$ java -version
openjdk version "1.8.0_362"
OpenJDK Runtime Environment (build 1.8.0_362-8u372-ga~us1-0ubuntu1~20.04-b09)
OpenJDK 64-Bit Server VM (build 25.362-b09, mixed mode)
ubuntu@5a99103747c6:~$ python -V
Python 3.8.10
ubuntu@5a99103747c6:~$ bazel version
WARNING: Invoking Bazel in batch mode since it is not invoked from within a workspace (below a directory having a WORKSPACE file).
Extracting Bazel installation...
Build label: 6.2.1
Build target: bazel-out/k8-opt/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar
Build time: Fri Jun 2 16:59:58 2023 (1685725198)
Build timestamp: 1685725198
Build timestamp as int: 1685725198