Halaman ini memberikan detail tentang konten container Bazel, cara membangun project abseil-cpp menggunakan Bazel di dalam container Bazel, dan cara membangun project ini langsung dari mesin host menggunakan container Bazel dengan pemasangan direktori.
Membangun project Abseil dari mesin host dengan pemasangan direktori
Petunjuk di bagian ini memungkinkan Anda membangun menggunakan container Bazel dengan sumber yang diambil di lingkungan host. Container dimulai untuk setiap perintah build yang Anda jalankan. Hasil build di-cache di lingkungan host sehingga dapat 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 memuat hasil yang di-cache untuk dibagikan ke berbagai build.
mkdir -p /tmp/build_output/
Gunakan container Bazel untuk membangun project dan menyediakan output build di folder output pada mesin host 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 dengan sanitizer dengan menambahkan flag build --config=asan|tsan|msan
untuk memilih AddressSanitizer (asan), ThreadSanitizer (tsan), atau MemorySanitizer (msan) sebagaimana mestinya.
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 menggunakan container Bazel dengan sumber di dalam container. Dengan memulai container di awal alur kerja pengembangan dan melakukan perubahan di ruang kerja dalam container, hasil build akan di-cache.
Mulai shell di container Bazel:
docker run --interactive --entrypoint=/bin/bash gcr.io/bazel-public/bazel:latest
Setiap ID container bersifat unik. Dalam petunjuk di bawah, container-nya adalah 5a99103747c6.
Clone project.
ubuntu@5a99103747c6:~$ git clone --depth 1 --branch 20220623.1 https://github.com/abseil/abseil-cpp.git && cd abseil-cpp/
Lakukan build rutin.
ubuntu@5a99103747c6:~/abseil-cpp$ bazel build //absl/...
Bangun project dengan sanitizer dengan menambahkan flag build --config=asan|tsan|msan
untuk memilih AddressSanitizer (asan), ThreadSanitizer (tsan), atau
MemorySanitizer (msan) sebagaimana mestinya.
ubuntu@5a99103747c6:~/abseil-cpp$ bazel build --config={asan | tsan | msan} -- //absl/... -//absl/types:variant_test
Menjelajahi container Bazel
Jika Anda belum melakukannya, mulai shell interaktif di dalam container Bazel.
docker run -it --entrypoint=/bin/bash gcr.io/bazel-public/bazel:latest
ubuntu@5a99103747c6:~$
Jelajahi konten container.
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
Menjelajahi Dockerfile Bazel
Jika ingin memeriksa cara pembuatan image Docker Bazel, Anda dapat menemukan Dockerfile-nya di bazelbuild/continuous-integration/bazel/oci.