"स्वचालित बिल्ड" का क्या अर्थ है?


15

मैं एक परियोजना के लिए सतत एकीकरण जोड़ने की कोशिश कर रहा हूँ।

विकिपीडिया के अनुसार , CI का एक प्रमुख टुकड़ा स्वचालित बिल्ड है। हालाँकि, मैं इस बारे में उलझन में हूँ कि वास्तव में इसका मतलब क्या है, क्योंकि CI और बिल्ड ऑटोमेशन लेख असहमत लगते हैं।

भ्रम के विशिष्ट बिंदु: "स्वचालित निर्माण" का क्या अर्थ है:

  • एक व्याख्या की गई भाषा, जैसे कि पायथन या पर्ल का उपयोग कर एक परियोजना?
  • एंड-यूज़र मशीन पर स्रोत से निर्माण?
  • एक ऐसा अनुप्रयोग जिसमें निर्भरताएँ होती हैं, जो उपयोगकर्ता के मशीन के लिए स्थानीय RDBMS में डेटाबेस के रूप में पूर्व-संकलित और वितरित नहीं की जा सकती हैं?

2
मैंने दोनों के साथ टैग किया है buildsऔर buildक्योंकि मुझे नहीं पता कि किसका उपयोग करना है।

जवाबों:


14

आप ध्यान देने योग्य हैं कि कुछ तकनीकों के लिए, एक संकलन कदम आवश्यक नहीं है। हालाँकि, मैं आपको "बिल्ड ऑटोमेशन" शब्द की व्याख्या करते समय एक व्यापक दृष्टिकोण अपनाने की सलाह देता हूं। निम्नलिखित दो प्रमुख घटकों को शामिल करते हुए "बिल्ड" के बारे में सोचें:

  • अंत उपयोगकर्ता के लिए तैनात परिवर्तन स्रोत कलाकृतियों (कोड, डेटाबेस स्कीमा, प्रलेखन, आदि) के लिए प्रक्रिया।
  • उक्त परिवर्तन के दौरान गुणवत्ता आश्वासन उपायों का अनुप्रयोग

स्वचालन, तो, बस किसी भी बनाने के लिए संदर्भित करता है - यदि सभी नहीं - उन कार्यों के स्वचालित (जो मैनुअल हस्तक्षेप की आवश्यकता नहीं है)। इसमें आपकी तकनीक के आधार पर कई प्रकार के चरण शामिल हो सकते हैं:

परिवर्तन कदम:

  • संकलन
  • लिंक करना
  • पैकेजिंग
  • तैनाती
  • आंकड़ों का विस्थापन
  • बैकअप
  • अधिसूचना

गुणवत्ता आश्वासन कदम:

  • संकलक चेतावनी / त्रुटियों
  • यूनिट परीक्षण
  • एकीकरण परीक्षण
  • सिस्टम परीक्षण
  • परिनियोजन प्रमाणीकरण

इन दिनों, अच्छे CI उपकरण आपको इन सभी चिंताओं का समाधान करने देंगे। प्रारंभ में, अधिकांश दुकानें अपने कोड के संकलन को स्वचालित करने में रुचि रखती हैं, क्योंकि यह पारंपरिक सॉफ्टवेयर विकास में समस्याओं का पहला और सबसे दृश्यमान स्रोत है।


21

एक स्वचालित बिल्ड एक प्रक्रिया का विवरण है जिसे निम्नलिखित मूल बातें शामिल करनी चाहिए:

  1. स्रोत नियंत्रण से नवीनतम कोड प्राप्त करें
  2. निष्पादन योग्य में नवीनतम कोड संकलित करें
  3. संकलित कोड के खिलाफ परीक्षण (इकाई परीक्षण, सिस्टम परीक्षण, एकीकरण परीक्षण) चलाएं
  4. तैनाती के लिए एक ज्ञात स्थान पर निष्पादन योग्य पूरा करें।
  5. बिल्ड के परिणामों को प्रकाशित करें।
    5.1 सफल संकलन, यूनिट परीक्षण सफलता

यह एक हाथ से चलने वाली प्रक्रिया है, जिसे शून्य मैनुअल हस्तक्षेप के साथ चलना चाहिए।


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

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

2

मेरे दिमाग में, एक स्वचालित निर्माण कुछ ऐसा है

  • स्वचालित रूप से होता है, या तो एक अनुसूची पर या स्रोत नियंत्रण के लिए प्रत्येक प्रतिबद्ध के साथ
  • आर्टिफैक्ट्स का एक सेट बनाता है जिसे बस किसी भी सर्वर पर तैनात किया जा सकता है

उद्देश्य के लिए एक तैनाती प्रक्रिया है जिसे दोहराया जा सकता है - पढ़ा: परीक्षण किया गया - ताकि जब आप उत्पादन में तैनात हों, तो आपके पास एक निश्चित डिग्री हो कि चीजें गलत न हों। निर्माण और परिनियोजन प्रक्रियाओं में कम मानवीय सहभागिता, आपकी रिहाई सुरक्षित होगी।

यदि आपके पास एक गैर-संकलित भाषा है, तो आप अभी भी एक साइट का निर्माण कर सकते हैं और एक एकल आर्टिफैक्ट बनाने के लिए इसे ज़िप कर सकते हैं।

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

मैं सुझाव दूंगा कि एकीकरण / प्रतिगमन परीक्षण, निर्माण प्रक्रिया के बजाय तैनाती प्रक्रिया के हिस्से के रूप में चलाए जा सकते हैं (हालांकि, यदि आपके पास सुविधाजनक वातावरण है, तो आप हर बिल्ड के साथ तैनात कर सकते हैं)।


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

@DavidThornley: हाँ। यह उपयोगी है। अधिकांश CI टूल आपको अपने सेट शेड्यूल के बाहर एक बिल्ड को किक करने की अनुमति देते हैं। लेकिन फिर से, यह एक स्वचालित निर्माण नहीं है क्योंकि यह विकल्प नहीं है। यदि एक डेवलपर को हमेशा इसे ट्रिगर करना होता है तो यह एक स्वचालित निर्माण होगा।
पीडीआर

1
a project using an interpreted language, such as Python or Perl?

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

एंड-यूज़र मशीन पर स्रोत से निर्माण?

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

एक ऐसा अनुप्रयोग जिसमें निर्भरताएँ होती हैं, जो उपयोगकर्ता के मशीन के लिए स्थानीय RDBMS में डेटाबेस के रूप में पूर्व-संकलित और वितरित नहीं की जा सकती हैं?

ये निरंतर एकीकरण के परीक्षण भाग के अंतर्गत आते हैं क्योंकि आप यह सुनिश्चित करने के लिए डेटाबेस को स्वचालित रूप से नष्ट और पुन: निर्मित कर सकते हैं कि स्क्रिप्ट सही हैं और प्रोग्राम सही ढंग से इसके विरुद्ध परीक्षण करता है।


1

आप अपने प्रश्न में जो चर्चा कर रहे हैं वह वास्तव में 3 अलग-अलग अवधारणाएँ हैं:

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

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

इस स्थिति को कम करने के लिए, हम इस ओवरहेड को निकालने के लिए अन्य तकनीकों का उपयोग करते हैं।

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

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


1
महान बिंदु ... यह बहुत बुरा है कि ज्यादातर लोग थ्रेड और वोट के नीचे तक नहीं पढ़ते हैं।
hotshot309

0

"स्वचालित निर्माण" का मतलब है कि आप स्रोत नियंत्रण से एक शिप्युल पैकेज में एक (शेड्यूल करने योग्य) क्रिया (आमतौर पर शेल स्क्रिप्ट या बैच फ़ाइल) के साथ जा सकते हैं।

इस संदर्भ में, वास्तव में एक निर्माण क्या होता है, इस बात पर बहुत कुछ निर्भर करता है कि वास्तव में यह क्या है आप शिपिंग हैं, यह कैसे वितरित किया जाता है, और आपके विकास स्टैक के विभिन्न भागों के लिए कौन से कदम आवश्यक हैं, लेकिन किसी भी मामले में, आप के साथ शुरू करते हैं स्रोत नियंत्रण में क्या है, और आप एक shippable उत्पाद (या एक त्रुटि संदेश और एक नाराज परियोजना प्रबंधक) के साथ समाप्त होते हैं।

एक साधारण पायथन परियोजना के लिए, एक स्वचालित निर्माण में केवल दो चरण शामिल हो सकते हैं - स्रोतों की जाँच करना और प्रासंगिक फाइलों को सही निर्देशिकाओं में कॉपी करना। अधिक जटिल परियोजनाओं के लिए, इसमें निम्न चीजें शामिल हो सकती हैं:

  • संकलन, लिंकिंग
  • स्वचालित परीक्षण चल रहा है
  • इंस्टॉलर पैकेज बनाना
  • स्थापना
  • डेटाबेस को संशोधित करना
  • बैकअप बनाना (यदि आपको वापस रोल करना है तो)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.