इस पेज पर बताया गया है कि बिल्ड सिस्टम क्या है, ये क्या काम करते हैं, और आपको बिल्ड सिस्टम के बारे में बताना होगा और यह भी बताएं कि कंपाइलर और बिल्ड स्क्रिप्ट आपके चुने गए विकल्प के तौर पर संगठन का दायरा बढ़ाना शुरू हो जाता है. यह उन डेवलपर के लिए है जिनके पास ज़्यादा बेहतरीन अनुभव मिल सकता है.
बिल्ड सिस्टम क्या है?
बुनियादी तौर पर, सभी बिल्ड सिस्टम का एक सीधा मकसद होता है: वे पूरी तरह बदलते हैं इंजीनियर द्वारा लिखे गए सोर्स कोड को एक्ज़ीक्यूटेबल बाइनरी में लिखा जाता है, जिसे पढ़ा जा सकता है मशीन से. बिल्ड सिस्टम सिर्फ़ लोगों के बनाए गए कोड के लिए नहीं हैं; वे यह भी अनुमति देते हैं हम ऐसी मशीन का इस्तेमाल करके अपने-आप बिल्ड तैयार करते हैं. चाहे वह टेस्ट हो या रिलीज़ प्रोडक्शन. हज़ारों इंजीनियरों वाले संगठन में, यह सामान्य बात है कि ज़्यादातर बिल्ड सीधे इंजीनियर के बजाय अपने-आप ट्रिगर होते हैं.
क्या मैं सिर्फ़ कंपाइलर का इस्तेमाल नहीं कर सकता?
बिल्ड सिस्टम की ज़रूरत अभी साफ़ तौर पर पता नहीं चल रही है. ज़्यादातर इंजीनियर
कोडिंग सीखते समय, बिल्ड सिस्टम का इस्तेमाल न करें: ज़्यादातर मामलों में, शुरुआत करने वाले टूल का इस्तेमाल किया जाता है
जैसे, कमांड लाइन से सीधे gcc
या javac
या
इंटिग्रेटेड डेवलपमेंट एनवायरमेंट (आईडीई) शामिल है. जब तक सभी सोर्स कोड
पहले से बताई गई डायरेक्ट्री में कोई निर्देश दे रहे हैं, तो इस तरह का निर्देश ठीक काम करता है:
javac *.java
यह Java कंपाइलर को मौजूदा डायरेक्ट्री में बदल सकते हैं और उसे एक बाइनरी क्लास फ़ाइल में बदल सकते हैं. सबसे सामान्य मामले में, यह है और उनकी ज़रूरत को पूरा करें.
हालांकि, कोड के बड़ा होते ही जटिलताएं शुरू हो जाती हैं. javac
स्मार्ट है
वर्तमान डायरेक्ट्री की सबडायरेक्ट्री में देखने के लिए काफ़ी है, ताकि
आयात करें. हालांकि, इसके अन्य हिस्सों में स्टोर कोड ढूंढने का कोई तरीका नहीं है,
फ़ाइल सिस्टम (शायद कई प्रोजेक्ट के साथ शेयर की गई लाइब्रेरी). यह सिर्फ़ यह जानता है कि
Java कोड कैसे बनाया जाता है. बड़े सिस्टम में अक्सर अलग-अलग चीज़ें लिखी होती हैं
पर निर्भर करता है. साथ ही, कई तरह की प्रोग्रामिंग भाषाएं
इसका मतलब है कि एक लैंग्वेज के लिए कोई कंपाइलर पूरा सिस्टम नहीं बना सकता.
एक बार कई भाषाओं में बनाए गए कोड या कई सारे कंपाइलेशन का इस्तेमाल करने के बाद इकाइयों के लिए, बिल्डिंग कोड अब एक चरण वाली प्रक्रिया नहीं है. अब आपको आकलन करना होगा कि आपका कोड इस पर निर्भर करता है और उन टुकड़ों को उचित क्रम में हर टूल के लिए अलग सेट है. अगर कोई डिपेंडेंसी बदलती है, तो आपको पुरानी बाइनरी के आधार पर बचने के लिए इस प्रक्रिया को दोहराएं. सम यह प्रोसेस थोड़ी मुश्किल हो जाती है और इसमें गड़बड़ियां होने की आशंका भी बढ़ जाती है.
कंपाइलर को यह भी नहीं पता होता कि बाहरी एलिमेंट को कैसे हैंडल करना है
डिपेंडेंसी, जैसे कि Java में तीसरे पक्ष की JAR
फ़ाइलें. बिल्ड सिस्टम के बिना,
इसे मैनेज करने के लिए, इंटरनेट से डिपेंडेंसी डाउनलोड करें और
उसे हार्ड ड्राइव पर lib
फ़ोल्डर में रखा जाता है और कंपाइलर को पढ़ने के लिए कॉन्फ़िगर किया जाता है
लाइब्रेरी से डाउनलोड करें. समय के साथ, इसे बनाए रखना मुश्किल हो सकता है
इन बाहरी डिपेंडेंसी के अपडेट, वर्शन, और सोर्स के बारे में भी बता सकते हैं.
शेल स्क्रिप्ट का क्या होता है?
मान लीजिए कि आपका हॉबी प्रोजेक्ट इतना आसान है कि आप इसे बना सकते हैं का इस्तेमाल करते समय समस्या को हल करने के लिए, पहले इस्तेमाल कर रहे थे. ऐसा हो सकता है कि आपको अब भी एक बिल्ड सिस्टम की ज़रूरत न हो और आपको अपने-आप कुछ आसान शेल स्क्रिप्ट का इस्तेमाल करके, मुश्किल हिस्सों को दूर करने के लिए, चीज़ों को सही क्रम में तैयार करना. इससे कुछ समय तक मदद मिलती है, लेकिन जल्द ही आपको और भी समस्याएं आने लगेंगी:
यह बोरिंग हो जाता है. जैसे-जैसे आपका सिस्टम ज़्यादा जटिल होता जाएगा, वैसे-वैसे आपने खर्च करना शुरू कर दिया आपको बिल्ड स्क्रिप्ट पर काम करने में उतना ही समय लगता है जितना रीयल कोड पर काम करने में लगता है. डीबग करना शेल स्क्रिप्ट में मुश्किलें आती हैं. इनके ऊपर हैकिंग के ज़्यादा से ज़्यादा तरीके लागू किए जाते हैं एक-दूसरे को टारगेट करें.
यह धीमी है. यह पक्का करने के लिए कि कहीं आपको गलती से पुरानी लाइब्रेरी का इस्तेमाल न हो जाए, बिल्ड स्क्रिप्ट हर बार डिपेंडेंसी बनाने के क्रम में सेट हो जाती है, ताकि उसे चलाना. आपको लगता है कि एआई की मदद से काम करने वाले हिस्सों का पता लगाने के लिए, जिसे फिर से बनाया गया है, लेकिन वह स्क्रिप्ट में ज़्यादा जटिल लगता है और गड़बड़ी होने की आशंका है. या आपके पास यह तय करने की सुविधा होती है कि कौनसे हिस्से दोबारा बनाने हैं, लेकिन इसके बाद, आपको स्क्वेयर चार्ट पर वापस ले जाना है.
खुशखबरी: अब रिलीज़ का समय आ गया है! बेहतर है कि सभी तर्क निकाल लें अपना फ़ाइनल बिल्ड बनाने के लिए, आपको जार कमांड पास करना होगा. और याद रखें उसे कैसे अपलोड करें और उसे सेंट्रल रिपॉज़िटरी (डेटा स्टोर करने की जगह) में पुश करें. साथ ही, हमारे प्लैटफ़ॉर्म पर दस्तावेज़ों के अपडेट पुश करें और उपयोगकर्ताओं को सूचना भेजें. अच्छा, शायद इसके लिए किसी दूसरी स्क्रिप्ट की ज़रूरत है...
आपदा! आपकी हार्ड ड्राइव क्रैश हो जाती है और अब आपको उसे फिर से बनाना होगा सिस्टम. आपके पास अपनी सभी सोर्स फ़ाइलों को वर्शन में रखने की काबिलीयत है लेकिन उन लाइब्रेरी का क्या जिन्हें आपने डाउनलोड किया है? क्या आप उन्हें ढूंढ सकते हैं फिर से सबमिट करें और पक्का करें कि वे उसी वर्शन पर हों जैसा आपने पहली बार डाउनलोड किया? शायद आपकी स्क्रिप्टों पर निर्भर करता है कि विशेष स्थानों पर इंस्टॉल किया जा सकता है—क्या आप उसी परिवेश को पुनर्स्थापित कर सकते हैं स्क्रिप्ट फिर से काम करने लगी हैं? उन सभी एनवायरमेंट वैरिएबल का क्या होगा जिन्हें आपने सेट किया है क्या कंपाइलर को सही तरीके से काम करने के बाद वह याद नहीं रहा?
समस्याओं के बावजूद, आपका प्रोजेक्ट इतना सफल है कि आप और इंजीनियरों को काम पर रखने की शुरुआत की जा सकती है. अब आपको पता चल गया है कि कोई आपदा नहीं होगी पिछली समस्याओं को हल करने के लिए—आपको उसी दर्द से निपटना होगा जब भी कोई नया डेवलपर आपकी टीम में शामिल होता है, तब बूटस्ट्रैपिंग प्रोसेस होती है. और आपकी पूरी कोशिशों के बावजूद, दोनों में थोड़ा अंतर है के लिए इस्तेमाल किया जा सकता है. अक्सर, एक व्यक्ति की मशीन पर जो काम करता है वह काम नहीं करता और हर बार डीबगिंग टूल पाथ में कुछ घंटे लगते हैं या लाइब्रेरी वर्शन का इस्तेमाल करके पता लगाया जा सकता है कि फ़र्क़ कहां है.
आपको यह तय करना होगा कि आपको बिल्ड सिस्टम को ऑटोमेट करना है. सैद्धांतिक तौर पर, यह बिलकुल नया कंप्यूटर लेना और अपने बिल्ड को चलाने के लिए इसे सेट अप करना बहुत आसान है क्रॉन की मदद से हर रात स्क्रिप्ट बनाई जाती है. आपको अब भी इस दर्द से उबरना है सेटअप प्रक्रिया, लेकिन अब आपको किसी इंसान के दिमाग छोटी-मोटी समस्याओं का पता लगाकर उन्हें हल कर सकते हैं. अब, हर सुबह जब आप में, आप देखते हैं कि कल रात का बिल्ड इसलिए विफल रहा क्योंकि कल एक डेवलपर सिस्टम में बदलाव किया, जो उसके लिए काम करता था, लेकिन ऑटोमेटेड बिल्ड सिस्टम. हर बार इसे आसानी से ठीक कर दिया जाता है, लेकिन अक्सर ऐसा होता है कि इन आसान तरीकों को खोजने और लागू करने में आपको रोज़ काफ़ी समय लगाना होगा समाधान.
बिल्ड, प्रोजेक्ट के बढ़ने के साथ-साथ धीमा और धीमा हो जाता है. इंतज़ार करते हुए, एक दिन का निर्माण पूरा करना हो, तो आप अपने डेस्कटॉप के, एक सहकर्मी, जो छुट्टी पर है और काश, इसकी वजह से, कंप्यूटेशनल पावर की बर्बादी होती थी.
आप स्केल की क्लासिक समस्या का सामना कर रहे हैं. यहां पर काम करने वाले एक डेवलपर के लिए करीब एक या दो सप्ताह के लिए कोड की कुछ सौ लाइनें (जिसमें का अनुभव अब तक उस जूनियर डेवलपर का पूरा अनुभव रहा है जिसने अभी-अभी विश्वविद्यालय) है, तो आपको बस एक कंपाइलर की ज़रूरत होगी. आपको स्क्रिप्ट से पढ़ने में थोड़ी मदद मिल सकती है आगे. हालांकि, जैसे ही आपको कई डेवलपर के साथ मिलकर काम करना होगा और मशीन, यहां तक कि एक बेहतरीन बिल्ड स्क्रिप्ट भी काफ़ी नहीं होती, क्योंकि यह इन मशीनों में मामूली अंतर की वजह समझ पाना मुश्किल होता है. इस स्थिति में, यह आसान तरीका काम करने लगता है. अब समय है, एक असली बिल्ड सिस्टम में निवेश करने का.