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

इस पेज पर, 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/...

सैनिटाइज़र की मदद से प्रोजेक्ट बनाएं. इसके लिए, --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 था.

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

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

सैनिटाइज़र की मदद से प्रोजेक्ट बनाएं. इसके लिए, --config=asan|tsan|msan बिल्ड फ़्लैग जोड़ें. इससे AddressSanitizer (asan), ThreadSanitizer (tsan) या MemorySanitizer (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 इमेज कैसे बनाई जाती है, तो आपको इसका Dockerfile bazelbuild/continuous-integration/bazel/oci पर मिलेगा.