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