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 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.
root@5a99103747c6:~# git clone https://github.com/abseil/abseil-cpp.git && cd abseil-cpp/
Lakukan build rutin.
root@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.
root@5a99103747c6:~/abseil-cpp# bazel build --config=--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
root@5a99103747c6:/#
Jelajahi konten container.
root@5a99103747c6:/# clang --version clang version 8.0.0 (trunk 340178) Target: x86_64-unknown-linux-gnu Thread model: posix InstalledDir: /usr/local/bin
root@5a99103747c6:/# java -version openjdk version "1.8.0_181" OpenJDK Runtime Environment (build 1.8.0_181-8u181-b13-0ubuntu0.16.04.1-b13) OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
root@5a99103747c6:/# python -V Python 2.7.12
root@5a99103747c6:/# python3 -V Python 3.6.6
root@5a99103747c6:/# bazel version Extracting Bazel installation... Build label: 6.0.0 Build target: bazel-out/k8-opt/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar Build time: Mon Dec 19 15:52:35 2022 (1671465155) Build timestamp: 1671465155 Build timestamp as int: 1671465155