Bazel, Make, Maven, और Gradle की तरह ही, ओपन-सोर्स बिल्ड और टेस्ट टूल है. यह, आसानी से पढ़ी जा सकने वाली, हाई-लेवल बिल्ड लैंग्वेज का इस्तेमाल करता है. Bazel, कई भाषाओं में प्रोजेक्ट के साथ काम करता है और कई प्लैटफ़ॉर्म के लिए आउटपुट बनाता है. Bazel, कई रिपॉज़िटरी में मौजूद बड़े कोडबेस और बड़ी संख्या में उपयोगकर्ताओं के साथ काम करता है.
फ़ायदे
Bazel के ये फ़ायदे हैं:
हाई-लेवल बिल्ड लैंग्वेज. Bazel, आपके प्रोजेक्ट की बिल्ड प्रॉपर्टी के बारे में बताने के लिए, आसानी से पढ़ी जा सकने वाली एक ऐसी भाषा का इस्तेमाल करता है जिसे हाई सेमेंटिकल लेवल पर ऐब्स्ट्रैक्ट किया गया है. अन्य टूल के उलट, Bazel, लाइब्रेरी, बाइनरी, स्क्रिप्ट, और डेटा सेट के कॉन्सेप्ट पर काम करता है. इससे आपको कंपाइलर और लिंकर जैसे टूल के लिए अलग-अलग कॉल लिखने की ज़रूरत नहीं पड़ती.
Bazel, तेज़ और भरोसेमंद है. Bazel, पहले किए गए सभी काम को कैश मेमोरी में सेव करता है. साथ ही, फ़ाइल के कॉन्टेंट और बिल्ड कमांड में किए गए बदलावों को ट्रैक करता है. इस तरह, Bazel को पता होता है कि किसी चीज़ को फिर से कब बनाना है. साथ ही, यह सिर्फ़ उसी चीज़ को फिर से बनाता है. बिल्ड की प्रोसेस को और तेज़ करने के लिए, अपने प्रोजेक्ट को इस तरह सेट अप किया जा सकता है कि वह ज़्यादा पैरलल और इंक्रीमेंटल तरीके से बिल्ड हो.
Bazel, मल्टी-प्लैटफ़ॉर्म है. Bazel, Linux, macOS, और Windows पर काम करता है. Bazel, एक ही प्रोजेक्ट से डेस्कटॉप, सर्वर, और मोबाइल जैसे कई प्लैटफ़ॉर्म के लिए बाइनरी और डिप्लॉय किए जा सकने वाले पैकेज बना सकता है.
Bazel को स्केल किया जा सकता है. Bazel, 1 लाख से ज़्यादा सोर्स फ़ाइलों वाले बिल्ड को हैंडल करते समय भी तेज़ी से काम करता है. यह, कई रिपॉज़िटरी और हज़ारों की संख्या में मौजूद उपयोगकर्ता आधार के साथ काम करता है.
Bazel को बढ़ाया जा सकता है. यह कई भाषाओं के साथ काम करता है. साथ ही, Bazel को किसी अन्य भाषा या फ़्रेमवर्क के साथ काम करने के लिए भी बढ़ाया जा सकता है.
Bazel का इस्तेमाल करना
Bazel की मदद से किसी प्रोजेक्ट को बिल्ड करने या उसकी जांच करने के लिए, आम तौर पर यह तरीका अपनाया जाता है:
Bazel सेट अप करना. Bazel डाउनलोड और इंस्टॉल करना.
प्रोजेक्ट वर्कस्पेस सेट अप करना. यह एक ऐसी डायरेक्ट्री होती है जहां Bazel, बिल्ड इनपुट और
BUILDफ़ाइलें ढूंढता है. साथ ही, यहां यह बिल्ड आउटपुट सेव करता है.BUILDफ़ाइल लिखना. इससे Bazel को पता चलता है कि क्या बिल्ड करना है और उसे कैसे बिल्ड करना है.Starlark का इस्तेमाल करके, बिल्ड टारगेट के बारे में जानकारी देकर
BUILDफ़ाइल लिखी जाती है. यह, डोमेन के लिए खास तौर पर बनाई गई एक लैंग्वेज है. (यहां उदाहरण देखें.)बिल्ड टारगेट में, इनपुट आर्टफ़ैक्ट का एक सेट शामिल होता है. Bazel, इस सेट के साथ-साथ इसकी डिपेंडेंसी को भी बिल्ड करता है. इसमें, Bazel जिस बिल्ड नियम का इस्तेमाल करके इसे बिल्ड करेगा वह नियम और बिल्ड नियम को कॉन्फ़िगर करने वाले विकल्प भी शामिल होते हैं.
बिल्ड नियम में, उन बिल्ड टूल के बारे में जानकारी होती है जिनका इस्तेमाल Bazel करेगा. जैसे, कंपाइलर और लिंकर. साथ ही, इसमें इन टूल के कॉन्फ़िगरेशन के बारे में भी जानकारी होती है. Bazel के साथ कई बिल्ड नियम शिप किए जाते हैं. इनमें, काम करने वाले प्लैटफ़ॉर्म पर काम करने वाली भाषाओं में, आर्टफ़ैक्ट के सबसे आम टाइप शामिल होते हैं.
कमांड लाइन से Bazel चलाना. Bazel, आपके आउटपुट को वर्कस्पेस में रखता है.
बिल्ड करने के अलावा, Bazel का इस्तेमाल करके टेस्ट भी चलाए जा सकते हैं. साथ ही, अपने कोड में डिपेंडेंसी को ट्रैक करने के लिए, बिल्ड के बारे में क्वेरी भी की जा सकती है .
Bazel की बिल्ड प्रोसेस
बिल्ड या टेस्ट चलाने पर, Bazel यह काम करता है:
टारगेट से जुड़ी
BUILDफ़ाइलें लोड करता है.इनपुट और उनकी डिपेंडेंसी का विश्लेषण करता है. साथ ही, तय किए गए बिल्ड नियम लागू करता है और ऐक्शन ग्राफ़ बनाता है.
जब तक फ़ाइनल बिल्ड आउटपुट नहीं बन जाते, तब तक इनपुट पर बिल्ड ऐक्शन एक्ज़ीक्यूट करता है.
पहले किए गए सभी बिल्ड के काम को कैश मेमोरी में सेव किया जाता है. इसलिए, Bazel, कैश मेमोरी में सेव किए गए आर्टफ़ैक्ट की पहचान करके उनका फिर से इस्तेमाल कर सकता है. साथ ही, सिर्फ़ उन चीज़ों को फिर से बिल्ड या टेस्ट कर सकता है जिनमें बदलाव किया गया है. सही तरीके से काम करने की प्रोसेस को और बेहतर बनाने के लिए, Bazel को सैंडबॉक्सिंग के ज़रिए, बिल्ड और टेस्ट को हर्मेटिक तरीके से चलाने के लिए सेट अप किया जा सकता है. इससे, गड़बड़ी की संभावना कम हो जाती है और रिप्रोड्यूसिबिलिटी बढ़ जाती है.
ऐक्शन ग्राफ़
ऐक्शन ग्राफ़ में, बिल्ड आर्टफ़ैक्ट, उनके बीच के संबंध, और Bazel की ओर से किए जाने वाले बिल्ड ऐक्शन शामिल होते हैं. इस ग्राफ़ की मदद से, Bazel, फ़ाइल के कॉन्टेंट में किए गए बदलावों के साथ-साथ, ऐक्शन में किए गए बदलावों को भी ट्रैक कर सकता है. जैसे, बिल्ड या टेस्ट कमांड. साथ ही, इसे यह भी पता होता है कि पहले कौन-सा बिल्ड काम किया गया है. इस ग्राफ़ की मदद से, अपने कोड में डिप101}डिपेंडेंसी को आसानी से ट्रैक किया जा सकता है.
शुरुआती ट्यूटोरियल
Bazel का इस्तेमाल शुरू करने के लिए, शुरुआती निर्देश देखें या सीधे Bazel के ट्यूटोरियल पर जाएं: