2010-12-04 32 views
14

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

स्वचालित निर्माण क्यों (या क्यों नहीं)?

+2

तो आपको देर से रहने की आवश्यकता नहीं है अगले शुक्रवार को बिल्डिंग बेबीसिटिंग? –

+3

मैं ईमानदारी से याद नहीं कर सकता जब मैं एक ऐसे प्रोजेक्ट पर आखिरी था जिस पर सभी यूनिट परीक्षणों में चलने और चलाने के लिए स्वचालित निर्माण नहीं होता था। लोग अभी भी व्यावसायिक विकास वातावरण में कम कुछ भी काम करते हैं? – cfeduke

+0

@cfeduke, मैं एससीएम के बिना कंपनियों में आया हूं। सीआई और स्वचालित परीक्षण, कई कंपनियों के लिए अभी भी नया और बहुत विदेशी है। डेस्कटॉप यूआई दुनिया वास्तव में खराब आकार में है क्योंकि उपकरण और तकनीक पहुंच से बाहर हैं अधिकांश टीमों के लिए। यह आखिरकार नवीनतम एमएस ढांचे में बदल रहा है। –

उत्तर

12

मेरे पास एक वीएम में एक सतत एकीकरण सर्वर स्थापित है जो मेरे उत्पादन वातावरण की नकल करता है; स्वचालित बिल्ड चलाकर, मुझे बहुत जल्द पता है जब मैंने कोड को स्क्रू करने के लिए कुछ किया है, और इसे ठीक करने के लिए कदम उठा सकता है।

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

अधिक बैकअप के लिए, विशेष रूप से थके हुए, आप अपने खुद के जेफ एटवुड से this article या जोएल स्पॉल्स्की से this one भेज सकते हैं। यह पिछले से:

यहाँ दैनिक के कई लाभ में से कुछ बनाता हैं:

जब एक बग तय हो गई है, परीक्षकों जल्दी नए संस्करण हो और को जांचना कर सकते हैं कि क्या वे बग वास्तव में था तय की।

डेवलपर्स, अधिक सुरक्षित है कि एक परिवर्तन उनके द्वारा की गई प्रणाली कि उत्पादित हो की 1024 संस्करणों में से किसी को तोड़ने के लिए नहीं जा रहा है महसूस कर सकते हैं वास्तव में परीक्षण करने के लिए अपने डेस्क पर एक ओएस/2 बॉक्स बिना पर।

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

विपणन की तरह

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

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

एक परीक्षक एक समस्या यह है कि प्रोग्रामर सोचता है कि तय हो गई है रिपोर्ट है, परीक्षक जो निर्माण वे में समस्या देखा कह सकते हैं। फिर प्रोग्रामर जब वह दुविधा में जाँच पर लग रहा है और क्या यह पता लगाने यह वास्तव में तय है।

+0

हाँ, मैं अपनी पोस्ट में जोएल के कुछ लेखों से लिंक करने जा रहा था, लेकिन मैंने किसी कारण से इसके खिलाफ फैसला किया। –

1

वजह से,

  1. अपने यूनिट टेस्ट की अखंडता स्वचालित रूप से परीक्षण किया जाता है। तो आपको दूसरों द्वारा किए गए परिवर्तनों के कारण आपके प्रोग्राम की कार्यक्षमता के बारे में चिंता करने की आवश्यकता नहीं है।

  2. स्वचालित रूप से नवीनतम चेक-इन फ़ाइलों और संकलन प्राप्त करता है, इसलिए अन्य रिपोर्ट किए गए किसी भी संकलन त्रुटि के कारण।

  3. विफलता और निर्माण के सफल निष्पादन पर तत्काल ई-मेल पावती। तो आप निर्माण में विफल होने के लिए मिलता है।

  4. कोड मानक उपकरण जैसे एफएक्स पुलिस, नेट के लिए स्टाइल कॉप जैसे एकीकृत किया जा सकता है। तो इसे बनाने के दौरान स्वचालित रूप से कोडिंग मानकों की जांच करता है।

+0

यह अच्छा है, लेकिन आपने यह नहीं कहा है * क्यों * आपको 'क्रूज़ कंट्रोल' या स्वचालित बिल्ड का उपयोग करना चाहिए ... केवल इसकी विशेषताएं, जो स्पष्ट रूप से पर्याप्त कारण नहीं हैं। – mpen

+0

संशोधित, धन्यवाद। – paragy

2

मुझे ध्यान में blatantly ripping off Wikipedia. भालू से शुरू करने की अनुमति दें, इन निरंतर एकीकरण के सामान्य लाभ, हर रात को एक आंशिक कार्यान्वयन विचार किया जाना चाहिए बनाता है, जिनमें से कर रहे हैं। जाहिर है, यदि आपका युगल स्वचालित रूप से स्वचालित (इकाई, कार्यात्मक, आदि) परीक्षणों के बिस्तर के साथ बनाता है तो आपका सिस्टम अधिक शक्तिशाली होगा।

लाभ:

  • जब इकाई परीक्षण असफल या एक बग उभर, डेवलपर्स codebase वापस एक बग-मुक्त राज्य के लिए लगातार वापस लौटने सकता है, समय डिबगिंग बर्बाद कर के बिना
  • डेवलपर्स का पता लगाने और ठीक एकीकरण समस्याओं - से परहेज रिलीज तिथियों पर आखिरी मिनट अराजकता, (जब हर कोई अपने थोड़ा असंगत संस्करणों में जांच करने की कोशिश करता है)।
  • टूट/असंगत कोड की पूर्व चेतावनी
  • परस्पर विरोधी की पूर्व चेतावनी बदलता है
  • सभी के तत्काल इकाई परीक्षण में परिवर्तन
  • एक "वर्तमान" प्रयोजनों
  • तत्काल परीक्षण, डेमो के लिए निर्माण, या जारी की लगातार उपलब्धता कोड, गुणवत्ता, कार्यक्षमता, या कोड के सिस्टम-व्यापी प्रभाव पर लिखने वाले
  • अक्सर कोड चेक-इन मॉड्यूलर, कम जटिल कोड
  • से उत्पन्न मीट्रिक बनाने के लिए डेवलपर्स को धक्का देता है utomated परीक्षण और सीआई कार्यात्मक, गुणवत्ता कोड के विकास पर ध्यान देने के डेवलपर्स, और एक टीम

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

आप remainder of the article, में नुकसान के बारे में पढ़ सकते हैं लेकिन याद रखें, यह विकिपीडिया है जिसके बारे में हम यहां बात कर रहे हैं।

+1

फॉलो-अप उत्तरों को देखते हुए, मुझे लगता है कि आप पहले से ही एकीकरण के बारे में जानते हैं और वास्तव में अलगाव में दैनिक निर्माण के लाभों के बारे में पूछ रहे हैं। http://stackoverflow.com/questions/4352091/why-automate-builds/4352097#4352097 बेहतर उत्तर है। – MrGomez

0

यदि कोई नियमित रूप से पूर्ण रूप से पूरा नहीं करता है, तो कोई ऐसी परिस्थिति को समाप्त कर सकता है जहां किसी प्रोग्राम का कुछ हिस्सा पुन: संकलित किया जाना चाहिए, यह नहीं है कि प्रोग्राम छुपाओं के उस हिस्से को संकलित करने में विफलता एक तोड़ने का परिवर्तन। आंशिक निर्माण ठीक काम करना जारी रखेगा, लेकिन अगले पूर्ण निर्माण से कोई स्पष्ट कारण नहीं होगा। उसके बाद काम करने के लिए चीजें प्राप्त करना एक दुःस्वप्न हो सकता है।

1

मुझे लगता है कि लगता है ...

ताकि आप जानते हैं कि जब आप जितनी जल्दी हो सके कुछ टूट गया है और इसे ठीक कर सकते हैं, जबकि इसे बाद में अपने सिर में ताजा अभी भी है, बल्कि सप्ताह से।

आसानी से मेरी पसंदीदा है, लेकिन यहाँ some other reasons टूक चुरा लिया जाता है जब मैं सिर्फ कारणों से आप सीआई का उपयोग नहीं होता लिए खोज रहा था:

  • कोड आप को तैनात नहीं कर सकते बेकार कोड है।
  • टीम पर अन्य लोगों के कोड परिवर्तनों के साथ अपने कोड परिवर्तनों को एकीकृत करना।
  • मैं कभी-कभी सभी को जांचने से पहले यूनिट परीक्षण चलाने के लिए भूल जाता हूं। मेरा सीआई सर्वर कभी नहीं भूल जाता है।
  • आपके कोड की केंद्रीकृत स्थिति जो संचार के साथ मदद कर सकती है। (यदि मैंने टूटी हुई कोड में चेक किया है और किसी और को तैनाती होनी चाहिए ... अच्छी तरह से यह मेरे पसंदीदा कारण पर वापस आ गया है।)
+0

बस एक मामूली क्विबल: कोड जिसे आप तैनात नहीं कर सकते हैं, वास्तव में, काफी उपयोगी कोड हो सकता है। आप अपने सभी परीक्षण तैनात नहीं कर रहे हैं, है ना? बाद में विकसित किए गए विकास के कुछ किनारे आमतौर पर तैनात नहीं होते हैं। और कुछ हिस्सों में आप खुद को रखना चाहते हैं, जैसे कि लाइसेंस कुंजी या इसी तरह की पीढ़ी, ताकि इसे तैनात नहीं किया जा सके। – foo

+0

इसका अर्थ यह है कि यदि आप अपना कोड आधार तैनात नहीं कर सकते हैं तो आपका पूरा काम कुछ भी नहीं है। टेस्ट, हस्ताक्षर, उपयोगिताओं, जो भी हो, यह सब अर्थहीन है यदि आपके पास तैनाती करने वाला कुछ नहीं है। – cfeduke

0

एक संभावित सामाजिक लाभ: स्वचालित बिल्ड टीम के सदस्यों के बीच विषाक्तता को कम कर सकता है। यदि डेवलपर्स प्रति दिन एक या अधिक बार एक बहु-चरण प्रक्रिया कर रहे हैं, तो गलतियों को रेंगने जा रहे हैं। मैन्युअल बिल्ड के साथ, टीम के साथी के पास रवैया हो सकता है, "मेरे अक्षम डेवलपर्स याद नहीं कर सकते कि कैसे हर दिन सही तरीके से निर्माण करना है ।आपको लगता है कि वे अब तक इसे कम कर चुके हैं। "स्वचालित निर्माण के साथ, आने वाली कोई भी समस्या प्रोग्राम के साथ समस्याएं होती है - एक कार्यक्रम जिसे किसी ने लिखा है, लेकिन अभी भी।

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