इस पेज पर, Bazel कंटेनर के कॉन्टेंट के बारे में जानकारी दी गई है. साथ ही, Bazel कंटेनर में Bazel का इस्तेमाल करके, abseil-cpp प्रोजेक्ट को बनाने का तरीका बताया गया है. इसके अलावा, डायरेक्ट्री माउंट करने के साथ Bazel कंटेनर का इस्तेमाल करके, सीधे होस्ट मशीन से इस प्रोजेक्ट को बनाने का तरीका भी बताया गया है.
डायरेक्ट्री माउंट करने की सुविधा की मदद से, अपनी होस्ट मशीन से Abseil प्रोजेक्ट बनाना
इस सेक्शन में दिए गए निर्देशों की मदद से, होस्ट एनवायरमेंट में चेक किए गए सोर्स के साथ, Bazel कंटेनर का इस्तेमाल करके बिल्ड किया जा सकता है. आपके हर बिल्ड कमांड के लिए, एक कंटेनर शुरू किया जाता है. बिल्ड के नतीजे आपके होस्ट एनवायरमेंट में कैश मेमोरी में सेव किए जाते हैं, ताकि उन्हें सभी बिल्ड में फिर से इस्तेमाल किया जा सके.
प्रोजेक्ट को अपनी होस्ट मशीन की डायरेक्ट्री में क्लोन करें.
git clone --depth 1 --branch 20220623.1 https://github.com/abseil/abseil-cpp.git /src/workspace
एक फ़ोल्डर बनाएं, जिसमें कैश मेमोरी में सेव किए गए नतीजे होंगे. इन्हें सभी बिल्ड के साथ शेयर किया जाएगा.
mkdir -p /tmp/build_output/
प्रोजेक्ट बनाने के लिए Bazel कंटेनर का इस्तेमाल करें और अपनी होस्ट मशीन के आउटपुट फ़ोल्डर में, बिल्ड आउटपुट उपलब्ध कराएं.
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/...
AddressSanitizer (asan), ThreadSanitizer (tsan) या
MemorySanitizer (msan) को चुनने के लिए, --config=asan|tsan|msan
बिल्ड
फ़्लैग जोड़कर प्रोजेक्ट को सैनिटाइज़र के साथ बनाएं.
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
कंटेनर के अंदर से Abseil प्रोजेक्ट बनाना
इस सेक्शन में दिए गए निर्देशों की मदद से, कंटेनर में मौजूद सोर्स के साथ Bazel कंटेनर का इस्तेमाल करके, बिल्ड किया जा सकता है. डेवलपमेंट वर्कफ़्लो की शुरुआत में कंटेनर शुरू करके और कंटेनर में वर्कस्पेस में बदलाव करके, बिल्ड के नतीजे कैश मेमोरी में सेव हो जाएंगे.
Bazel कंटेनर में शेल शुरू करना:
docker run --interactive --entrypoint=/bin/bash gcr.io/bazel-public/bazel:latest
हर कंटेनर आईडी यूनीक होता है. नीचे दिए गए निर्देशों में, कंटेनर का नाम 5a99103747c6 था.
प्रोजेक्ट का क्लोन बनाएं.
ubuntu@5a99103747c6:~$ git clone --depth 1 --branch 20220623.1 https://github.com/abseil/abseil-cpp.git && cd abseil-cpp/
नियमित तौर पर बिल्ड करें.
ubuntu@5a99103747c6:~/abseil-cpp$ bazel build //absl/...
AddressSanitizer (asan), ThreadSanitizer (tsan) या
MemorySanitizer (msan) को चुनने के लिए, --config=asan|tsan|msan
बिल्ड फ़्लैग जोड़कर प्रोजेक्ट को सैनिटाइज़र के साथ बनाएं.
ubuntu@5a99103747c6:~/abseil-cpp$ bazel build --config={asan | tsan | msan} -- //absl/... -//absl/types:variant_test
Bazel कंटेनर के बारे में जानकारी
अगर आपने पहले से ही ऐसा नहीं किया है, तो Bazel कंटेनर में इंटरैक्टिव शेल शुरू करें.
docker run -it --entrypoint=/bin/bash gcr.io/bazel-public/bazel:latest
ubuntu@5a99103747c6:~$
कंटेनर के कॉन्टेंट को एक्सप्लोर करें.
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
Bazel Dockerfile के बारे में जानकारी
अगर आपको यह देखना है कि Bazel की Docker इमेज कैसे बनाई जाती है, तो bazelbuild/continuous-integration/bazel/oci पर जाकर उसकी Dockerfile देखें.