Bazel Docker कंटेनर का इस्तेमाल शुरू करना

इस पेज पर, Bazel कंटेनर के कॉन्टेंट के बारे में जानकारी दी गई है. साथ ही, Bazel कंटेनर में Bazel का इस्तेमाल करके abseil-cpp प्रोजेक्ट बनाने का तरीका बताया गया है. इसके अलावा, इसमें डायरेक्ट्री माउंट करने के साथ Bazel कंटेनर का इस्तेमाल करके, होस्ट मशीन से सीधे इस प्रोजेक्ट को बनाने का तरीका भी बताया गया है.

डायरेक्ट्री माउंट करने की सुविधा का इस्तेमाल करके, अपनी होस्ट मशीन से Abseil प्रोजेक्ट बनाना

इस सेक्शन में दिए गए निर्देशों की मदद से, Bazel कंटेनर का इस्तेमाल करके बनाया जा सकता है. इसके लिए, आपके होस्ट एनवायरमेंट में सोर्स चेक आउट किए गए हों. हर बिल्ड कमांड के लिए, एक कंटेनर शुरू किया जाता है. बिल्ड के नतीजे, आपके होस्ट एनवायरमेंट में कैश मेमोरी में सेव किए जाते हैं, ताकि उन्हें सभी बिल्ड में फिर से इस्तेमाल किया जा सके.

प्रोजेक्ट को अपनी होस्ट मशीन की किसी डायरेक्ट्री में क्लोन करें.

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

सैनिटाइज़र की मदद से प्रोजेक्ट बनाएं. इसके लिए, --config=asan|tsan|msan build फ़्लैग जोड़ें. इससे AddressSanitizer (asan), ThreadSanitizer (tsan) या MemorySanitizer (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 था.

प्रोजेक्ट का क्लोन बनाएं.

root@5a99103747c6:~# git clone https://github.com/abseil/abseil-cpp.git && cd abseil-cpp/

नियमित तौर पर बिल्ड करें.

root@5a99103747c6:~/abseil-cpp# bazel build //absl/...

सैनिटाइज़र की मदद से प्रोजेक्ट बनाएं. इसके लिए, --config=asan|tsan|msan बिल्ड फ़्लैग जोड़ें. इससे AddressSanitizer (asan), ThreadSanitizer (tsan) या MemorySanitizer (msan) को चुना जा सकेगा.

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

Bazel कंटेनर एक्सप्लोर करना

अगर आपने पहले से ऐसा नहीं किया है, तो Bazel कंटेनर में इंटरैक्टिव शेल शुरू करें.

docker run -it --entrypoint=/bin/bash gcr.io/bazel-public/bazel:latest
root@5a99103747c6:/#

कंटेनर का कॉन्टेंट एक्सप्लोर करें.

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