मुझे दर्शन और निरंतर एकीकरण सेटअप के डिजाइन के साथ कुछ मदद की आवश्यकता है।
हमारे वर्तमान CI सेटअप बिल्डबॉट का उपयोग करता है। जब मैंने इसे डिजाइन करना शुरू किया, तो मुझे विरासत में मिला (अच्छी तरह से, सख्ती से नहीं, जैसा कि मैं एक साल पहले इसके डिजाइन में शामिल था) एक बीस्पोक सीआई बिल्डर जो रात में एक बार में पूरे निर्माण को चलाने के लिए सिलवाया गया था। थोड़ी देर के बाद, हमने फैसला किया कि यह अपर्याप्त था, और विभिन्न CI फ्रेमवर्क की खोज शुरू की, आखिरकार बिल्डबॉट का चयन किया। बिल्डबोट में संक्रमण करने के लिए मेरा एक लक्ष्य (इसके अलावा सभी व्हिज-बैंग एक्स्ट्रा का आनंद लेना है) हमारे बीस्पोक नाइटली बिल्डर की कुछ अपर्याप्तताओं को दूर करना था।
मुझे एक पल के लिए विनोद करो, और मुझे समझाने दो जो मुझे विरासत में मिला है। मेरी कंपनी के लिए कोडबेस लगभग 150 अद्वितीय c ++ विंडोज अनुप्रयोग हैं, जिनमें से प्रत्येक में एक या एक दर्जन से अधिक आंतरिक पुस्तकालयों पर निर्भरता है (और साथ ही 3 पार्टी पुस्तकालयों पर कई)। इन पुस्तकालयों में से कुछ अन्योन्याश्रित हैं, और उन अनुप्रयोगों पर निर्भर करते हैं जो (जबकि उनका एक दूसरे से कोई लेना-देना नहीं है) उसी पुस्तकालय के निर्माण के साथ बनाया जाना है। इन अनुप्रयोगों और पुस्तकालयों में से आधे को "विरासत" माना जाता है और यह असंभव है, और आईबीएम संकलक के कई अलग-अलग विन्यासों के साथ बनाया जाना चाहिए (जिसके लिए मैंने अद्वितीय उपवर्ग लिखे हैं Compile
), और अन्य आधे दृश्य स्टूडियो के साथ बनाए गए हैं।ShellCommand
एस, जैसा कि वीएसएस के लिए कोई समर्थन नहीं है)।
हमारे मूल रात्रिकालीन बिल्डर ने सब कुछ के लिए स्रोत को नीचे ले लिया, और एक निश्चित क्रम में सामान बनाया। केवल एक ही एप्लिकेशन बनाने या संशोधन करने या समूह की चीजों को लेने का कोई तरीका नहीं था। यह कई अनुप्रयोगों के निर्माण के लिए वर्चुअल मशीन लॉन्च करेगा। यह बहुत मजबूत नहीं था, यह वितरण योग्य नहीं था। यह बहुत एक्स्टेंसिबल नहीं था। मैं बिल्डबॉट में इन सभी सीमाओं को पार करने में सक्षम होना चाहता था।
जिस तरह से मैंने मूल रूप से यह किया था, उनमें से प्रत्येक के लिए प्रविष्टियां बनाने के लिए जो हम बनाना चाहते थे (उनमें से सभी 150ish), फिर ट्रिगर शेड्यूलर बनाएं जो विभिन्न अनुप्रयोगों को समूहों के रूप में बना सकते हैं, और फिर उन समूहों को एक समग्र रात्रिकालीन अनुसूचक के तहत तैयार कर सकते हैं। ये समर्पित दासों (कोई और वर्चुअल मशीन chicanery) पर नहीं चल सकते, और अगर मैं चाहता तो मैं बस नए गुलामों को जोड़ सकता था। अब, अगर हम शेड्यूल से बाहर एक पूर्ण निर्माण करना चाहते हैं, तो यह एक क्लिक है, लेकिन हम केवल एक एप्लिकेशन का निर्माण भी कर सकते हैं।
हालाँकि इस दृष्टिकोण की चार कमजोरियाँ हैं। एक हमारे स्रोत वृक्ष की निर्भरता का जटिल वेब है। कॉन्फ़िगर मेनटेन को सरल बनाने के लिए, सभी बिल्डरों को एक बड़े शब्दकोश से उत्पन्न किया जाता है। निर्भरता को पुनः प्राप्त किया जाता है और एक बहुत ही मजबूत तरीके से नहीं बनाया जाता है (अर्थात्, मेरे निर्माण-लक्ष्य में कुछ चीजों की कुंजी लगाना)। दूसरा यह है कि प्रत्येक बिल्ड में 15 से 21 बिल्ड चरण होते हैं, जो वेब इंटरफ़ेस में ब्राउज़ करना और देखना मुश्किल है, और चूंकि लगभग 150 कॉलम हैं, लोड करने के लिए हमेशा के लिए लेता है (30 सेकंड से कई मिनट तक सोचें)। तीसरा, हमारे पास अब बिल्ड टारगेट की ऑटोडिस्कवरी नहीं है (हालाँकि, इस बारे में मेरे सहकर्मियों में से एक ने मुझे परेशान किया है, मैं नहीं देखता कि यह हमें पहले स्थान पर क्या मिला)। आखिरकार,
अब, नए विकास के लिए आगे बढ़ते हुए, हम g ++ और तोड़फोड़ (पुराने रिपॉजिटरी को पोर्ट नहीं करते हुए, आपका - सिर्फ नए सामान के लिए) का उपयोग करना शुरू कर रहे हैं। इसके अलावा, हम और अधिक इकाई परीक्षण करना शुरू कर रहे हैं ("अधिक" गलत चित्र दे सकता है ... यह किसी भी तरह अधिक है ), और एकीकरण परीक्षण (अजगर का उपयोग करके)। मुझे पता है कि मेरे मौजूदा कॉन्फ़िगरेशन में इनको कैसे फिट किया जाए, यह एक कठिन समय है।
तो, मैं कहाँ दार्शनिक रूप से गलत हो गया हूँ? मैं सबसे अच्छी तरह से कैसे आगे बढ़ सकता हूं (बिल्डबॉट के साथ - यह पहेली का एकमात्र टुकड़ा है जिस पर मेरे पास काम करने का लाइसेंस है) ताकि मेरा कॉन्फ़िगरेशन वास्तव में संभव हो? मैं अपने डिजाइन की कुछ कमजोरियों को कैसे संबोधित करूं? वास्तव में बड़े, (संभवतः अधिक-) जटिल कोडबेस के लिए सीआई रणनीतियों के संदर्भ में क्या काम करता है?
संपादित करें:
मुझे लगा कि मैंने अपनी समस्या बताई है, लेकिन जाहिर है कि मैं पर्याप्त स्पष्ट नहीं था। मैं CI प्लेटफार्मों को बदलने के लिए सुझावों की तलाश नहीं कर रहा हूं । यह नहीं होने जा रहा है, और सुझाव है कि स्वीकार नहीं किया जाएगा जवाब। मैं जानना चाहता हूं कि अन्य लोग सीआई का उपयोग करके जटिल कोडबेस का प्रबंधन कैसे करते हैं। मेरे पास एक दर्जन अलग-अलग उत्पाद हैं, और मेरी निर्भरता हवा में बिखरी हुई है, और वे सभी अलग-अलग हैं। यह वह है जो मैं जानना चाहता हूं कि कैसे निपटना है।