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