प्रश्न: 'एमवीएन तैनाती' निष्पादित करने के लिए सबसे अच्छा समाधान क्या है कि तैनाती हिस्सा केवल सभी यूनिट परीक्षण सफल होने के बाद ही चलाया जाता है और कोई प्रोसेसिंग चरण डुप्लिकेट नहीं किया जाता है?मैवेन मल्टी-मॉड्यूल केवल सफल यूनिट परीक्षणों के बाद भंडार में तैनात है
मुझे उम्मीद थी कि सरल जवाब था: मेवेन कमांड 'एक्स' (या ध्वज का उपयोग करें) निष्पादित करें जैसे कि डिफॉल्ट को जीवनशैली में पूर्व लक्ष्यों का आविष्कार किए बिना चलाया जा सकता है।
दुर्भाग्य से यह एक सरल उत्तर है प्रतीत नहीं होता है। मैंने नीचे दिए गए पथ पर विवरण शामिल किया है।
हम निम्नलिखित तीन आवश्यकताओं है:
- निष्पादित Maven लक्ष्य को तैनात एक दूरस्थ भंडार करने के लिए सभी बहु मॉड्यूल कलाकृतियों को तैनात करने की।
- केवल सभी परियोजनाओं में सभी यूनिट परीक्षण पास होने पर ही तैनात करें।
- किसी भी प्रसंस्करण को दोहराना न करें।
हम, बस "mvn स्वच्छ तैनाती" के साथ शुरू किया लेकिन हम एक जोड़े मुद्दों पर ध्यान:
- निर्माण सभी इकाई परीक्षण पूरा करने से पहले बंद कर देंगे :: तो हम --fail-पर- जोड़ा अंत झंडा
- तैनाती लक्ष्य किसी भी मॉड्यूल है कि सफल रहे थे के खिलाफ अमल होगा।
इसका परिणाम "दूषित" राज्य में होता है जहां रिमोट रिपोजिटरी में केवल आंशिक तैनाती हो सकती है (यदि निर्माण में विफलताओं के बाद मॉड्यूल थे)।
- तैनाती :: यह एक पूरी तरह से स्वचालित प्रक्रिया के लिए बहुत भारी होने के लिए निर्धारित किया गया था करने के लिए कलाकृतियों मचान पूर्व:
हम 3 अलग समाधान को देखा।
- डिफ़ॉल्ट जीवन चक्र ऐसा है कि 'mvn तैनात -pci तैनाती' किसी भी पूर्व लक्ष्यों लागू :: इस काम किया है और तेज़ था बिना चला जाएगा ओवरराइड करने के लिए एक प्रोफ़ाइल का प्रयोग करें, लेकिन स्पष्ट रूप से एक अपरंपरागत दृष्टिकोण है।
- बस 'एमवीएन क्लीन पैकेज' चला रहा है और फिर केवल iff सफल 'mvn deploy' निष्पादित करता है :: यह काम पर प्रतीत होता है और लक्ष्यों को लागू होने पर केवल मामूली हिट लेता है (हालांकि उनमें से कुछ पुन: प्रसंस्करण के लिए पर्याप्त स्मार्ट नहीं हैं : एक अपरिवर्तित कार्यक्षेत्र)
मैं पृष्ठभूमि विवरण मैं ही कोई बेहतर दृष्टिकोण या (संभावित संबंध में एक मजबूत राय) निम्नलिखित अनुरोधों में से एक बना है निर्धारित करने के लिए प्रदान की है के साथ समुदाय के लिए इस सवाल का मुद्रा
- एक नई तैनाती लक्ष्य है कि expecta साथ अन्य सभी जीवन चक्र लक्ष्यों से अलग चलाने के लिए और अलग कर सकते हैं tion कि: सभी पूर्व चरणों पहले से ही चलाया जा रहा है और यह है कि यह करने के लिए समान रूप से तैनाती निष्पादित करेंगे "mvn तैनात"
- प्रभावी रूप से पिछले लक्ष्यों को अक्षम हैं जो तैनाती लक्ष्य में एक ध्वज।
एक छोटे से बॉक्स से बाहर और निश्चित रूप से वर्तमान सम्मेलन के खिलाफ और अधिक:
- एक ध्वज है कि कार्यवाही करने से पहले सभी मॉड्यूल के लिए [इकाई] परीक्षण लक्ष्य को चलाने के लिए Maven कहते थे।
नोट्स:
- हम जेनकींस उपयोग कर रहे हैं, लेकिन इस सवाल के प्रयोजनों के लिए सीआई पर्यावरण जटिलता नहीं है।
- मैंने 'एमवीएन तैनाती: तैनाती' लक्ष्य की कोशिश की, लेकिन इसमें कई अस्पष्ट त्रुटियां थीं।
- मैंने आवश्यकताओं के भाग के रूप में एकीकरण परीक्षण नहीं माना है।
अद्यतन 8/20/2013
मैं आस्थगित तैनाती प्लगइन का परीक्षण किया और निर्धारित उपकरण काम किया है कि उम्मीद के रूप में, लेकिन जिस तरह से करने के लिए समय लिया।
हमारे कोड बेस के लिए:
- mvn स्वच्छ तैनाती: 02:44 में मार डाला सभी लक्ष्यों के लिए
- mvn साफ स्थापित 'टाल-तैनात-प्लगइन': सभी लक्ष्यों के लिए 15 मिनट में मार डाला
- एमवीएन स्वच्छ पैकेज;
-
(तैनाती सहित) सभी लक्ष्यों के लिए
- : mvn एक कस्टम निर्माण प्रोफ़ाइल अक्षम कर देता है कि पहले लक्ष्यों को मार डाला -pci तैनाती की तैनाती 4:30
- केवल तैनाती: 1:45
- mvn साफ पैकेज; mvn तैनात -Dmaven.test.skip = समान कार्यस्थल निष्पादित पर सच: केवल 4:40
- तैनाती:
-
(तैनाती सहित) सभी लक्ष्यों के लिए
- 1:54
परीक्षणों को छोड़ने के बाद साफ पैकेज स्थगित तैनाती से तेज़ी से चलता है और परीक्षण सफल होने के बाद तक तैनाती में देरी की हमारी इच्छा पूरी करता है।
तैनाती जीवन चक्र निष्पादित करता है और पिछले प्रत्येक लक्ष्य (प्रक्रिया, संकलन, परीक्षण, पैकेज इत्यादि) से बाहर निकलने के लिए एक मामूली समय हिट प्रतीत होता है। हालांकि एकमात्र विकल्प गैर-मानक निष्पादन को हैक करना है, जो केवल 10 सेकंड बचाता है।
मैं एक बार पूरा कर दूंगा और एक बार पूरा जवाब अपडेट करूँगा। उत्तर के लिए धन्यवाद! – Jared
एफवाईआई, उल्लिखित मुद्दा https://issues.apache.org/jira/browse/MDEPLOY-157 –
को संशोधित किया गया। धन्यवाद – Hilikus