Halaman ini memberikan detail tentang konten container Bazel, cara mem-build project abseil-cpp menggunakan Bazel di dalam container Bazel, dan cara membuat project ini langsung dari mesin host menggunakan container Bazel dengan pemasangan direktori.
Buat project Abseil dari mesin host dengan pemasangan direktori
Petunjuk di bagian ini memungkinkan Anda mem-build menggunakan penampung Bazel dengan sumber yang diperiksa di lingkungan host Anda. Container akan dimulai untuk setiap perintah build yang Anda jalankan. Hasil build di-cache di lingkungan host agar dapat digunakan kembali di berbagai build.
Buat clone project ke direktori di mesin host.
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 mem-build project dan menyediakan output build di folder output di 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) 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 mem-build menggunakan penampung Bazel dengan sumber di dalam container. Dengan memulai container di awal alur kerja pengembangan dan melakukan perubahan pada performa dalam container, hasil build akan disimpan dalam 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/...
Bangun project menggunakan sanitizer dengan menambahkan flag build --config=asan|tsan|msan
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