यह मानते हुए कि अपने देव टीमों में से प्रत्येक अपनी परियोजना का एक अलग मॉड्यूल पर काम करता है और "एक परिवर्तन एकमात्र टीम है जो परिवर्तन बनाया पाइपलाइन को गति प्रदान करने की जरूरत है" मैं Git Submodules का उपयोग करेंगे:
सबमोड्यूल आपको एक गिट भंडार को अन्य गिट भंडार की उपनिर्देशिका के रूप में रखने की अनुमति देता है।
एक रेपो के साथ
, कि एक मुख्य मॉड्यूल रेपो के एक submodule, प्रत्येक टीम के लिए हो जाता है। यह टीमों के लिए पारदर्शी होगा क्योंकि वे केवल उनके नामित रिपो पर ही काम करते हैं।
मुख्य मॉड्यूल बिल्ड टूल के संदर्भ में आपकी मॉड्यूल परियोजनाओं के लिए एग्रीगेटर प्रोजेक्ट भी है। तो, आप विकल्प हैं:
- प्रत्येक रेपो/पाइपलाइन को व्यक्तिगत रूप से निर्माण करने के लिए या
- ही बार में पूरा (मुख्य) परियोजना का निर्माण।
एक बिल्ड पाइपलाइन जिसमें एक या अधिक बिल्ड नौकरियां शामिल हैं, प्रत्येक टीम/रेपो/मॉड्यूल से जुड़ी है।
मुख्य पाइपलाइन केवल डाउनस्ट्रीम नौकरियों का एक संग्रह है जो टीम/रेपो/मॉड्यूल पाइपलाइनों के प्रारंभिक बिंदुओं का प्रतिनिधित्व करता है।
बिल्ड ट्रिगर्स मैन्युअल रूप से, समय या स्रोत परिवर्तनों में से कोई भी हो सकता है।
का निर्णय भी किए जाने के लिए है: अपने मॉड्यूल
- आप चाहे संस्करण को व्यक्तिगत रूप से, ऐसी अन्य मॉड्यूल रिलीज संस्करण केवल पर निर्भर हैं।
- लाभ:
- अन्य, अधिक स्थिर संस्करण जारी पर भरोसा करते हैं आम तौर पर।
- मॉड्यूल तय कर सकते हैं कि वे किस निर्भरता का उपयोग करना चाहते हैं।
- नुकसान:
- विज्ञप्ति प्रत्येक मॉड्यूल के लिए तैयार किया जाना है।
- इसमें अधिक समय लग सकता है जब तक कि नवीनतम परिवर्तन दूसरों के लिए उपलब्ध न हो जाएं।
- मॉड्यूल को यह तय करना है कि वे किस निर्भरता का उपयोग करना चाहते हैं। और उन्हें हर बार अनुकूलित करना होगा जब उन्हें किसी नए संस्करण में कार्यक्षमता की आवश्यकता होती है।
या आप पूरी परियोजना (जो तब मॉड्यूल द्वारा विरासत में मिली है) के लिए एक संस्करण का उपयोग करें: विकास चक्र, एक रिलीज़ संस्करण के दौरान ...-SNAPSHOT
जब प्रोजेक्ट रिलीज़।
इस मामले में, यदि ऐसे मॉड्यूल हैं जो दूसरों के लिए आवश्यक हैं, उदा। कोर मॉड्यूल, इसका एक सफल निर्माण निर्भर मॉड्यूल के निर्माण को भी ट्रिगर करना चाहिए, ताकि असंगतताएं जितनी जल्दी हो सके पहचान सकें।
- लाभ:
- नवीनतम परिवर्तन तुरंत दूसरों के लिए उपलब्ध हैं।
- पूरी परियोजना के लिए केवल एक बार डिलीवर होने के बाद एक रिलीज तैयार की जाती है।
- नुकसान:
- नवीनतम तुरंत दूसरों के लिए उपलब्ध परिवर्तन तो स्थिर नहीं (स्नैपशॉट) कोड को लागू कर सकते हैं।
रे "मैं पूरा पाइपलाइन कैसे कल्पना कर सकते हैं"
मैं उस पल में वर्कफ़्लो के साथ ऐसा कर सकते हैं किसी भी प्लगइन के बारे में पता नहीं कर रहा हूँ।
Build Graph View Plugin मूल रूप से प्रवाह बिल्ड के लिए बनाया गया है जो नहीं है, लेकिन यह अब दो से अधिक वर्ष है:
डाउनस्ट्रीम बनाता DownStreamRunDeclarer विस्तार बिंदु से पहचाने जाते हैं।
- डिफ़ॉल्ट एक जेनकिन्स निर्भरताग्राफ और अपस्ट्रीम कारण का उपयोग कर रहा है और इस तरह सामान्य निर्माण श्रृंखला का पता लगा सकता है।
- बिल्ड-फ्लो प्लगइन ग्राफ़
- के रूप में प्रवाह निष्पादन प्रदान करने में योगदान दे रहा है कुछ जेनकींस प्लगइन्स बाद में समर्पित समाधानों का योगदान कर सकते हैं।
(तुम्हें पता है, और "बाद में" अक्सर बन "हो सकता है" नहीं होगा और कभी नहीं में विकास;।)
Build Pipeline Plugin नहीं है, लेकिन यह जाहिरा तौर पर भी उपयुक्त नहीं है वर्कफ़्लोज़ के लिए:
यह प्लगइन अपस्ट्रीम और डाउनस्ट्रीम कनेक्ट नौकरियों का एक बिल्ड पाइपलाइन दृश्य प्रदान करता है [...]
रे "तरह से पिछले सफल कलाकृतियों में खींचने के लिए"
जाहिर है यह नहीं है कि चिकनी Gradle साथ है:
डिफ़ॉल्ट रूप से, Gradle किसी भी खजाने को परिभाषित नहीं करता।
मैं Maven उपयोग कर रहा हूँ और वहाँ local and remote repositories मौजूद है जहाँ बाद भी हो सकता है:
[...] आंतरिक एक फ़ाइल या HTTP सर्वर आपकी कंपनी के भीतर पर स्थापित खजाने का इस्तेमाल किया साझा करने के लिए विकास टीमों और रिलीज के बीच निजी कलाकृतियों।
क्या आपने Artifactory या Nexus जैसे बाइनरी रिपोजिटरी मैनेजर का उपयोग करने पर विचार किया है?
[सीडी के पृष्ठ पर आंकड़े] के अनुसार [http://www.go.cd/) वे विभिन्न स्रोत भंडारों की धारणा पर आगे बढ़ते हैं। आप किस एससीएम का उपयोग करते हैं? आप किस निर्माण उपकरण का उपयोग करते हैं? –
निर्माण उपकरण और एससीएम इस प्रश्न के लिए महत्वपूर्ण नहीं हैं क्योंकि हम जेनकींस वर्कफ़्लो प्लगइन के साथ सही आदेशों को नियंत्रित और निष्पादित कर सकते हैं। लेकिन आपकी जानकारी के लिए, यह जावा एप्लिकेशन (ग्रेडल), डॉकर कंटेनर और लिनक्स वीएम के –
के निर्माण के लिए विभिन्न टूल्स का मिश्रण होगा, यह प्रश्न के लिए महत्वपूर्ण नहीं हो सकता है लेकिन यह उत्तर के लिए महत्वपूर्ण हो सकता है। –