2011-10-21 8 views
6

समस्या विवरणहडसन पर Maven भंडार में जारी कलाकृतियों (गैर स्नैपशॉट संस्करण) की ओवरराइटिंग को रोकने के लिए

पर विचार मामले Maven हडसन पर इस्तेमाल किया जा रहा है।

अब किसी एक परियोजना के चेकआउट ले लिया है, कुछ फ़ाइलों को संशोधित लेकिन गलती से एक ही विरूपण साक्ष्य आईडी और संस्करण संख्या (गैर स्नैपशॉट) का इस्तेमाल किया।

वह/वह तो हडसन पर इस परियोजना का निर्माण और Maven install.The संशोधित विरूपण साक्ष्य हडसन .m2 में है था। इस पर निर्भर कोई भी अन्य परियोजना संशोधित आर्टिफैक्ट के साथ बनाई जाएगी। संकलन विफल नहीं होने पर कोई भी इसे नहीं ढूंढता है। हालांकि केंद्रीय आर्टिफैक्ट में सही आर्टिफैक्ट रहता है, इसका कभी भी उपयोग नहीं किया जाता है क्योंकि संशोधित व्यक्ति को एमएम 2 से उठाया जाता है जब हडसन इमारत शुरू करता है।

तो मैं इस आकस्मिक मानव त्रुटि को रोकने के लिए एक रास्ता तलाश रहा हूं।

  1. वैसे भी हडसन पर गैर स्नैपशॉट संस्करणों (रिलीज कलाकृतियों) पर मेवेन स्थापित करने की अनुमति रद्द करने के लिए?
  2. हडसन में और दूरस्थ रिमोट केंद्रीय भंडार में .m2 के चेकसम की तुलना करने का कोई तरीका ताकि चेकसम विफलता चेतावनियां उत्पन्न कर सकती है या विफल हो सकती है?

मैं पहले से ही जाँच की है के रूप में वे अपरिवर्तनीय के लिए हैं केंद्रीय भंडार से अद्यतन गैर स्नैपशॉट संस्करणों के लिए मजबूर करने का कोई तरीका नहीं है कि वहाँ।

केंद्रीय भंडार को पर्जिंग या हडसन पर प्रत्येक नौकरी के लिए अलग भंडार का उपयोग करने के परिणामस्वरूप बिल्डिंग समय & डिस्क स्पेस उपयोग क्रमशः बढ़ जाएगा।

किसी भी मदद की सराहना की जाएगी।

उत्तर

1

इसे हल करने का कोई सीधा तरीका नहीं था, लेकिन हमने इस क्रॉन-जॉब को लिखकर इस अनिश्चितता से हल किया जो हर पांच मिनट में चलता है और सभी को चिह्नित करता है जार जो नॉन-स्नैपशॉट हैं, केवल हंडसन के स्थानीय भंडार में पढ़े जाते हैं। इस तरह जब हडसन में कुछ प्रोजेक्ट इसे ओवरराइट करने की कोशिश करता है तो मेरा एमवीएन इंस्टॉल या एमवीएन तैनात करता है, यह कलाकृतियों को अत्यधिक पढ़ाने में विफल रहता है क्योंकि वे केवल पढ़े जाते हैं।

पुन: जारी किए जाने वाले किसी भी नए कलाकृतियों को आसानी से लिखा जा सकता है। एक बार अगले पांच मिनट के भीतर लिखे गए स्क्रिप्ट उन्हें केवल पढ़ने के रूप में चिह्नित करते हैं।

यहाँ यूनिक्स स्क्रिप्ट के लिए कोड permission-handler.sh

#!/bin/bash 
cd ~/.m2 
date 2>&1>> permission-handler.out 
find . -name '*jar' -type f | grep -v 'SNAPSHOT' | xargs chmod -vc 444 2>&1>> permission-handler.out 
chmod 777 permission-handler.out 

लॉगिंग भी देखने के लिए जो सभी कलाकृतियों के रूप में केवल जारी किया गया चिह्नित किया गया है नियंत्रित किया जाता है है।

1

मुझे नहीं लगता कि आप एक एक विरूपण साक्ष्य को अधिलेखित करने से रोकने के लिए स्थापित एक रास्ता खोजने के लिए जा रहे हैं। एक रिपॉजिटरी सर्वर में एक अद्यतन रिलीज आर्टिफैक्ट को तैनात करने से रोकने के लिए एक सेटिंग होनी चाहिए। उदाहरण के लिए, नेक्सस के लिए "How do I disable artifact redeployment" देखें।

+1

मैंने पहले से ही कलाकृतियों में तैनाती अनुमतियों को संभाला है। लेकिन इससे मदद नहीं मिलती है क्योंकि यदि एक ओवरराइट आर्टिफैक्ट .m2 रिपोजिटरी में मौजूद है और एक आश्रित प्रोजेक्ट हडसन मेवेन पर बनाया गया है तो हमेशा रिपोजिटरी सर्वर के बजाय .m2 से आर्टिफैक्ट चुनता है। हडसन में एक आर्टिफैक्ट डाउनलोड करने या मौसम की पुष्टि करने का कोई तरीका नहीं है। एम 2 आर्टिफैक्ट रेपॉजिटरी सर्वर के साथ सिंक हो रहा है। – Aman

1

यहाँ है कि हम कैसे हमारी परियोजना में संस्करणों का प्रबंधन:

हम एक SNAPSHOT संस्करण पर काम करते हैं। जेनकींस पर, हम है कि बनाता है और इस आवेदन का परीक्षण करती है, लेकिन अगर संस्करण नहीं एक SNAPSHOT है विफल रहता है एक फास्ट बिल्ड काम किया है। यह custom enforcer द्वारा किया जाता है (यह require release version enforcer के विपरीत है)।

जब हम रिलीज करना चाहते हैं, तो हम उसके लिए जेनकिन्स नौकरी का उपयोग करते हैं। parameterized build, और Maven release plugin, व्यक्ति जो अभी रिलीज (स्थिर संस्करण), अगले SNAPSHOT संस्करण के संस्करण है, साथ ही एससीएम टैग के नाम का संकेत होगा रिलीज करने का प्रभार में है का उपयोग करना। इस प्रकार, केवल जेनकींस एक स्थिर संस्करण को परिभाषित करेंगे और डेवलपर्स हमेशा SNAPSHOT कोड पर काम करेंगे।

लेकिन ज़ाहिर है, इस डेवलपर्स वह क्या उसकी स्थानीय मशीन पर चाहता है बनाने के लिए नहीं रोकता है। लेकिन हम हमेशा एक भरोसेमंद जगह पर विचार करते हैं: जेनकींस सर्वर।यह मेरी मशीन पर काम करता है किसी समस्या का कभी भी अच्छा जवाब नहीं है; o)

0

रिलीज रेपो के ओवरराइट की अनुमति न देने से यह आपके मैवेन रिपोजिटरी (जैसे नेक्सस, आर्टिफैक्टरी) को कॉन्फ़िगर करके हल किया जाता है। नेक्सस में हमारे पास स्नैपशॉट के लिए एक रेपो है और एक रिलीज के लिए है। SNAPSHOT रेपो ओवरराइट की अनुमति देता है। लेकिन रिलीज रेपो ओवरराइट की अनुमति नहीं देता है। यह रेपो के लिए नेक्सस में यह एक साधारण चेकबॉक्स सुविधा है। एक बार रिलीज संस्करण को रेपो में रखा जाता है, इसे ओवरराइट नहीं किया जा सकता है। बहुत अच्छी तरह से काम करता है।

संबंधित मुद्दे