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 बिल्ड फ़्लैग जोड़ें. इससे, 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