2012-06-19 14 views
6

टूल्स:
जेनकींस वर्। 1.470
Maven 2
सबवर्सनजेनेट्स आंशिक बिल्ड/मॉड्यूलर बिल्ड कमिट हुक

पर्यावरण

मान लें अपने निर्माण परियोजनाओं के एक नंबर ए-डी है। दिखाए गए अनुसार निर्भरता ग्राफ मौजूद है। यह कहना है: बी ए में कक्षाओं पर निर्भर करता है, सी बी में कक्षाओं पर निर्भर करता है, डी ए में कक्षाओं पर निर्भर करता है। हम जेनकींस बनाते हैं जैसे कि वे बिल्ड-बिल्ड एक्शन के रूप में उन पर निर्भर करता है।

एक
| -> बी -> सी
| -> डी

हर रात, हम एक पूर्ण निर्माण जेनकींस (ए, बनाता है ट्रिगर किए जाने को गति प्रदान बी (ट्रिगर सी), ट्रिगर डी)। यह ए को रात को बनाने के लिए आसानी से पर्याप्त किया जाता है, और शेष कैस्केड।

समस्या

हालांकि, एक प्रतिबद्ध हम परियोजनाओं है कि एक बार के लिए प्रतिबद्ध थे निर्माण करना चाहते हैं पर।

  • स्थिति 1: हम भंडार पोल (या commit hooks उपयोग करें, यह कोई फर्क नहीं पड़ता है) और एक बी के लिए प्रतिबद्ध था कि लगता है, तो बी का निर्माण करेगा और सी का निर्माण होगा। सफलता!

  • स्थिति 2: हम भंडार पोल और कहा कि बी खोजने के लिए और सी के लिए एक प्रतिबद्ध में लागू हुए थे तो जेनकींस (एक दूसरे का निर्माण बी (सी के निर्माण को ट्रिगर) के निर्माण के लिए, और निर्माण सी कोशिश करेंगे)। विफलता। देखें क्या होता है? सी दो बार बनाया गया था, कीमती निर्माण समय ले रहा था। तेजी से निर्माण रखें!

किसी को भी एक तरह से केवल एक प्रतिबद्ध निर्माण पाइप लाइन में उच्चतम परियोजना को गति प्रदान करने पता है?

मुझे लगता है एक समाधान के लिए एक जटिल SVN हुक है कि प्रत्येक पाइप लाइन में उच्चतम परियोजना को निर्धारित करता है हो सकता है ...

  • स्थिति 3: बी सी और डी के लिए प्रतिबद्ध एक प्रतिबद्ध में। एसवीएन हुक पाता है सी बी पर निर्भर करता है। हुक बी और डी

परेशानियों: बहुत जटिल एसवीएन प्रतिबद्ध हुक के लिए प्रोजेक्ट-विशिष्ट लिंक को कॉल करता है। एसवीएन हुक में पाइपलाइन को बनाए रखना है।

मुझे लगता है कि यह एक समस्या है जो दूसरों ने भाग लिया है। क्या कोई जेनकींस प्लगइन है जो इसके साथ मदद करता है?

+0

स्थिति 2 में, जेनकींस परियोजनाएं सी एंड बी एक ही एसवीएन परियोजना को देख रही हैं? – thekbb

उत्तर

1

यह कहना एक विचार होगा कि निर्माण के साथ प्रतीक्षा करने के लिए जेनकिंस कहें कि सी निर्माण पर निर्भर करता है। ऐसा करने के लिए नौकरी विन्यास के भीतर एक झंडा है। लेकिन आपको प्रत्येक नौकरी के लिए यह करना है। बीटीडब्ल्यू ...एक और झंडा भी है जिसके लिए जेनकींस को निर्माण के साथ इंतजार करना पड़ता है जब तक कि एक निर्भर नौकरी समाप्त न हो जाए।

0

मैं भी इस समस्या के लिए एक कुशल समाधान की तलाश में हूं। मैंने कई सुझाव देखे हैं, लेकिन अब तक हम लॉक & लांच प्लगइन का उपयोग करके निर्माण को क्रमबद्ध करके केवल एक नुकसान से बचने में कामयाब रहे हैं। यह किसी एकल चेकइन से कई बार निर्माण करने से नहीं रोकता है, लेकिन यह सुनिश्चित करेगा कि अपस्ट्रीम प्रोजेक्ट पूरा होने के बाद परियोजना को अनुक्रमिक रूप से पुनर्निर्मित किया जाएगा।

यह सामान्य मामले में हल करने के लिए वास्तव में एक जटिल समस्या है, लेकिन मैं इससे निपटने के लिए एक प्लगइन लिखने की सोच रहा हूं। एक साधारण समाधान यह जांचने के लिए है कि क्या एक अपस्ट्रीम प्रोजेक्ट वर्तमान में निर्माण कर रहा है, और यदि बिल्ड करें तो खुद को बिल्ड कतार से हटा दें। चूंकि अपस्ट्रीम जॉब आपके निर्माण को पूरा होने पर बंद कर देगा, यह एक विकल्प है।

एक बेहतर विकल्प एक प्लगइन होगा जो स्वचालित रूप से आपके निर्भरता ग्राफ के आधार पर बिल्ड कतार का प्रबंधन करता है। यह जटिल हो सकता है, क्योंकि आपको यह सुनिश्चित करने की आवश्यकता है कि कोई भी निर्माण तब तक शुरू नहीं हो जाता जब तक कि इसकी सभी निर्भरता पूरी नहीं हो जाती। अनिवार्य रूप से इसका मतलब है कि प्रत्येक चेकइन प्लगइन को कतार में सभी डाउनस्ट्रीम बिल्ड को स्वचालित रूप से जोड़ने का कारण बनता है ताकि यह उन्हें प्रबंधित कर सके। यह संभव है कि मौजूदा अपस्ट्रीम/डाउनस्ट्रीम ट्रिगर्स के साथ ऐसा करने का एक चालाक, आसान तरीका हो, लेकिन यह अभी तक मुझे स्पष्ट नहीं है कि इसे कैसे किया जाए। ऐसे पाइपलाइन प्लगइन्स पहले से ही हैं जो इस स्थिति को संभालने का दावा करते हैं, लेकिन वे स्पष्ट रूप से दौड़ की स्थिति को रोकने के लिए कुछ भी नहीं करते हैं, जहां डाउनस्ट्रीम बिल्ड को एक ही चेकइन द्वारा अपस्ट्रीम बिल्ड के रूप में ट्रिगर किया जा सकता है।

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