Mulai Menggunakan Container Docker Bazel

Laporkan masalah Lihat sumber Per malam · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

Halaman ini memberikan detail tentang isi kontainer Bazel, cara membangun project abseil-cpp menggunakan Bazel di dalam container Bazel, serta cara membuat project ini secara langsung dari komputer {i>host<i} menggunakan kontainer Bazel dengan pemasangan direktori.

Buat project Abseil dari mesin host dengan pemasangan direktori

Petunjuk di bagian ini memungkinkan Anda membangun aplikasi menggunakan container Bazel dengan sumber yang diperiksa di lingkungan {i>host<i} Anda. Penampung dimulai untuk setiap perintah build yang Anda jalankan. Hasil build di-cache di host Anda tertentu agar bisa digunakan kembali di berbagai build.

Clone project ke direktori di mesin host Anda.

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

Buat folder yang akan memiliki hasil yang di-cache untuk dibagikan di seluruh build.

mkdir -p /tmp/build_output/

Gunakan container Bazel untuk membangun project dan membuat build yang tersedia di folder {i> output<i} di mesin {i>host<i} Anda.

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/...

Bangun project menggunakan sanitizer dengan menambahkan build --config=asan|tsan|msan flag untuk memilih AddressSanitizer (asan), ThreadSanitizer (tsan), atau MemorySanitizer (msan) yang sesuai.

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

Membangun project Abseil dari dalam container

Petunjuk di bagian ini memungkinkan Anda membangun aplikasi menggunakan container Bazel dengan sumber yang ada di dalam container. Dengan memulai container di awal dari alur kerja pengembangan Anda dan melakukan perubahan di lingkungan kerja dalam , hasil build akan di-cache.

Mulai shell di container Bazel:

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

Setiap ID penampung bersifat unik. Pada petunjuk di bawah ini, container-nya adalah 5a99103747c6.

Meng-clone project.

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

Buat versi reguler.

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

Buat project dengan sanitizer dengan menambahkan --config=asan|tsan|msan build untuk memilih AddressSanitizer (asan), ThreadSanitizer (tsan) atau MemorySanitizer (msan) yang sesuai.

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

Jelajahi wadah Bazel

Jika belum melakukannya, mulai shell interaktif di dalam container Bazel.

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

Pelajari konten penampung.

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

Mempelajari Dockerfile Bazel

Jika ingin memeriksa cara image Bazel Docker dibangun, Anda dapat menemukan Dockerfile-nya di bazelbuild/continuous-integration/bazel/oci.