एक समर्पित निर्माण मशीन का उद्देश्य क्या है?


74

कई परिस्थितियों के कारण पिछले निर्माण चक्र में खराब तैनाती के कारण, मैंने अपने कार्यालय में एक समर्पित निर्माण मशीन के साथ भविष्य की सभी तैनाती करने के लिए अभियान चलाया और मेरे बॉस ने इस प्रस्ताव को स्वीकार कर लिया।

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

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

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

तो, एक बिल्ड मशीन का उपयोग करने का वास्तविक कारण क्या है, और क्या मैं इसे सही तरीके से उपयोग करने के करीब आया हूं?


166
"सभी आवश्यक सूचनाओं के साथ अपने कार्यालय को छोड़ने और फिर सीढ़ियों की एक उड़ान के लिए दूसरे कार्यालय में जाने के लिए बस एक साधारण निर्माण करने के लिए [...]" आपका वास्तव में क्या मतलब है? बिल्ड बनाने के लिए आप भौतिक रूप से उस मशीन का उपयोग करते हैं?
विंसेंट सवार्ड


13
असली डब्ल्यूटीएफ क्लियरकेस है, जो सभी आधुनिक ओपन सोर्स विकल्पों से भी बदतर है। यह परियोजना कौन सी भाषा है और इसका निर्माण कितना बड़ा / जटिल है?
pjc50

7
क्या आप टूल्स का इस्तेमाल कर रहे हैं? Git / SVN और जेनकिंस / टीम सिटी / ऑक्टोपस / TFS, आदि? या आप सिर्फ दूसरे कंप्यूटर में लॉग इन कर रहे हैं, विजुअल स्टूडियो को लोड कर रहे हैं या आपके पास क्या है ... प्रोजेक्ट की प्रतिलिपि बनाना, लोड करना, संकलन करना ... क्या आप पेशेवर टूल का उपयोग कर रहे हैं या इसे मैन्युअल रूप से कर रहे हैं?
वर्नरसीडी

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

जवाबों:


137

आम तौर पर आपके पास सिर्फ एक समर्पित मशीन नहीं होगी, लेकिन उस समर्पित मशीन पर एक बिल्ड सर्वर भी चलाएं। एक समर्पित बिल्ड मशीन केवल एक डेवलपर के काम को अवरुद्ध करने और एक केंद्रीकृत मशीन से तैनात करने का लाभ देती है।

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

बिल्ड सर्वर आमतौर पर एक ब्राउज़र में चलने वाले वेब गुई का उपयोग करके एक साथ कई उपयोगकर्ताओं या टीमों द्वारा एक्सेस किया जा सकता है।

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


3
मैंने वास्तव में कॉलेज के बाद से सी ++ को नहीं छुआ है, लेकिन मैं उपयोगिता को समझ सकता हूं। हालांकि इस मामले में, मुझे लगता है कि जो हम कर रहे हैं वह वास्तव में अभीष्ट उद्देश्य से दूर हो सकता है।
Zibbobz

21
कुछ भाषाओं के लिए (C ++ विशेष रूप से) अधिक प्रसंस्करण शक्ति के साथ एक समर्पित बॉक्स होना उपयोगी हो सकता है, यह देखते हुए कि यह अपेक्षाकृत धीमी संकलन है।
एंडरलैंड

31
निरंतर एकीकरण का मतलब सिर्फ एक बिल्ड सर्वर होने से अधिक है - इसका मतलब यह भी है कि हर कोई "बड़े धमाके" मर्ज की समस्याओं से बचने के लिए एक-दूसरे के परिवर्तनों को यथासंभव एकीकृत करता है। अन्यथा, स्पॉट-ऑन।
रोब क्रॉफर्ड

जबकि मुझे वह शक्ति पसंद है जो एक उदाहरण यहाँ दिए जा रहे बिंदु को देता है, फिर भी मुझे लगता है कि अंतिम पैराग्राफ इस उत्तर में पूरी तरह अनावश्यक है।
पियरे अरलाउड

3
"एक समर्पित निर्माण मशीन केवल एक डेवलपर के काम को अवरुद्ध करने और एक केंद्रीकृत मशीन से तैनात करने का लाभ देती है।" पूरी तरह से सच नहीं है। पूछने वाले ने बताया कि डेवलपर्स मशीन पर अशुद्ध वातावरण होना बहुत आसान है। शामिल लाइब्रेरी और अन्य पर्यावरण चर सभी बिल्ड परिणाम को बदल सकते हैं। एक समर्पित मशीन में आसान निर्माण मनोरंजन के लिए अनुमति देने के लिए एक अच्छी तरह से प्रलेखित वातावरण होना चाहिए।
TafT

107

Traubenfuchs के उत्तर के अलावा, आपने अपने प्रश्न में एक बिल्ड मशीन के लिए एक और कारण पर संकेत दिया है।

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

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


37
+ 1 किसी डेवलपर की मशीन पर कितनी बार काम होता है, और उसकी टीम के बाकी लोग नहीं ...
user2259716

45
इस। किसी अन्य मशीन के निर्माण का मुख्य उद्देश्य प्रजनन योग्य बनाता है ; समीकरण से गैर-प्रतिबद्ध सामान, विषम पर्यावरण चर आदि को समाप्त करके विशेष रूप से।
Matthieu M.

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

9
@MatthiasKuhn: सही मायने में (बाइट के लिए बाइट) प्रतिलिपि प्रस्तुत करने योग्य बनाता है बहुत अधिक, cf: reproducible-builds.org wiki.debian.org/ReproducibleBuilds
jjjjj

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

53

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

यह स्पष्ट नहीं है कि आप किस प्लेटफ़ॉर्म / भाषा का उपयोग कर रहे हैं, लेकिन आपके पास आदर्श रूप से एक बिल्ड सर्वर होना चाहिए जो सीधे स्रोत नियंत्रण से खींचता है। यही है, जब एक निर्माण की आवश्यकता होती है, तो यह भंडार के दिए गए संस्करण से स्रोत को पुनः प्राप्त करेगा और इसे स्वचालित रूप से संकलित करेगा। इसके लिए बिल्ड को स्क्रिप्ट करने के लिए स्वचालित बिल्ड टूल के उपयोग की आवश्यकता होती है। यदि आपके पास यह नहीं है, तो यह चरण # 1 होना चाहिए।

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


इसके अलावा, अतिरिक्त वायरस प्रतिरोध।
जोशुआ

@ जोशुआ आपको वह विचार क्या देता है?
jpmc26

14
@ jpmc26: बिल्ड मशीन को इस पर स्थापित सॉफ्टवेयर बहुत कम मिलता है, इसे कम रिमोट एक्सेस पॉइंट्स की जरूरत होती है, और कोई भी इस पर बेतरतीब इंटरनेट साइटों के लिए वेब ब्राउज़र नहीं खोल रहा है।
जोशुआ

19

अन्य उत्तर काफी सही ढंग से नोट करते हैं कि आपको बिल्ड को स्वचालित करना चाहिए, जिसका अर्थ है कि किसी अन्य कार्यालय में चलना आवश्यक नहीं है। हालाँकि, मुझे अपनी निर्माण प्रक्रिया को बेहतर बनाने के लिए कुछ निश्चित कदमों का प्रस्ताव देना चाहिए:

  • सबसे पहले, बिल्ड सर्वर पर रिमोट एक्सेस सेट करें! यदि आप मैन्युअल रूप से कमांड "मेक" टाइप करके बनाते हैं, तो इसका मतलब है कि आपको "मेक" टाइप करने के लिए अब किसी अन्य कार्यालय तक नहीं जाना होगा, आप बस सर्वर में एसएसएच कर सकते हैं और "मेक" टाइप कर सकते हैं। अगर आप अभी तक मेक या इसी तरह के बिल्ड सिस्टम का उपयोग नहीं करते हैं, तो ऐसी बिल्ड सिस्टम का उपयोग करें।
  • दूसरे, एक निरंतर एकीकरण वातावरण स्थापित करें जो स्वचालित रूप से संस्करण नियंत्रण प्रणाली से नवीनतम परिवर्तन खींचता है (आपके पास एक संस्करण नियंत्रण प्रणाली है, ठीक है? यदि नहीं, तो वह एक अतिरिक्त कदम होगा) और उन्हें बनाता है। मैं जेनकिंस की सलाह देता हूं। अपने यूनिट परीक्षणों और सिस्टम-स्तरीय एकीकरण परीक्षणों को चलाने के लिए जेनकिंस सेट करें (आपके पास दोनों सही हैं; यदि नहीं, तो उन्हें यूनिट परीक्षणों से शुरू करें और फिर सिस्टम-स्तरीय एकीकरण परीक्षणों में समाप्त करें)।
  • तीसरा, यदि आप समस्याग्रस्त अन्य टीमों के साथ एक ही मशीन साझा करते हुए पाते हैं (जैसे कि यदि आपके पास क्या ऑपरेटिंग सिस्टम पर अलग-अलग राय है और आपको किस संस्करण और बिटक्वाइन का उपयोग करना चाहिए), तो वर्चुअलाइजेशन का उपयोग करने पर विचार करें। एक अच्छा सर्वर आज बड़ी संख्या में वर्चुअल मशीन चला सकता है। शायद आप खुद को एक 32-बिट मशीन और 64-बिट मशीन स्थापित कर सकते हैं ताकि आप दोनों आर्किटेक्चर पर निर्माण कार्यों को जान सकें।
  • अंत में, यह आवश्यक नहीं हो सकता है: यदि आपके पास पूरी तरह से एक समर्पित मशीन होनी चाहिए, जैसे कि यदि आपके आवेदन का प्रदर्शन बहुत महत्व रखता है और उसी समय चलने वाले अन्य बिल्ड / टेस्ट रन आपके परिणामों को बहुत अधिक प्रभावित करते हैं, तो एक समर्पित हार्डवेयर सर्वर स्थापित करें केवल आप उपयोग करते हैं। हालाँकि, हाल के सर्वरों पर जिनकी संख्या 40 वर्चुअल CPU कोर या इससे भी अधिक हो सकती है, कुछ वर्चुअल मशीन बनाना अपेक्षाकृत सरल है, जो एक ही CPU कोर तक पहुँच साझा नहीं करते हैं।

मैं मैनुअल बिल्ड की तुलना में एक साझा मशीन को बेहतर समझूंगा। मेरी वर्तमान परियोजना अब एक आभासी मशीन का उपयोग करती है, लेकिन सिस्टम-स्तरीय एकीकरण प्रदर्शन परीक्षणों की आवश्यकता के कारण, हम 40 वर्चुअल सीपीयू कोर के साथ एक समर्पित सर्वर पर जा रहे हैं, जिसमें प्रदर्शन परीक्षण के लिए 17 की आवश्यकता होती है।


16

... का उपयोग करने के लिए हमारे कार्यालय में एक वास्तविक मशीन प्राप्त करने के बजाय, हम कई अन्य समूहों के साथ एक मशीन साझा कर रहे हैं ...

आप कहते हैं कि जैसे यह एक बुरी बात है।

अब आपके पास एक सामान्य बिल्ड सर्वर है जो आपके सभी बिल्ड - आपकी और अन्य टीमों के माध्यम से बनता है। निर्माण की संगति? चेक।

... सभी आवश्यक सूचनाओं के साथ अपने कार्यालय को छोड़ने और फिर एक साधारण निर्माण करने के लिए सीढ़ियों की उड़ान से दूसरे कार्यालय तक जाने की परेशानी मुझे आश्चर्यचकित कर रही है कि मैंने इसे पहले स्थान पर क्यों प्रस्तावित किया।

आप अभी भी निर्माण मैन्युअल रूप से कर रहे हैं और यह अच्छा नहीं है।

आपको एक सर्वर प्रक्रिया की आवश्यकता होती है, जिसके लिए आप अपनी ओर से किए जाने वाले बिल्ड के लिए अनुरोध / कतार जमा करते हैं और उस प्रक्रिया से आपको परिणाम वापस भेजते हैं।


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

7
"आप कहते हैं कि यह एक बुरी बात है। आपके पास अब एक सामान्य बिल्ड सर्वर है जो आपके सभी बिल्ड - आपकी और अन्य टीमों 'के माध्यम से बनाया गया है। बिल्ड की निरंतरता? चेक"। यह एक सुसंगत निर्माण के पूर्ण विपरीत है! यदि कोई अन्य टीम अपने कंपाइलर या किसी अन्य उपकरण को अपडेट करने का निर्णय लेती है जो आप अचानक पूरी तरह से अलग बिल्ड वातावरण के साथ काम कर रहे हैं। यह बहुत बुरी स्थिति है (इसके अलावा एक निर्माण मशीन शुरू करने के लिए नहीं होने के अलावा)।
वू

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

@Voo यह शायद ही सबसे खराब स्थिति है, यह एक मध्यम मामला परिदृश्य है। वर्तमान में पूछने वाले के पास सबसे खराब स्थिति है। (यह भी ध्यान दें कि यदि आप बिल्ड को कभी भी पुन: उत्पन्न नहीं करते हैं, तो रैंडम कंपाइलर अपग्रेड बहुत समस्या नहीं है)
इम्बिसिस

@immibis आपने जिस भाग को उद्धृत किया है, उसके ठीक बाद के भाग में आपने भाग पढ़ा है? बिल्ड सर्वर शामिल है, तो यह सबसे खराब स्थिति है। गैर प्रतिलिपि प्रस्तुत करने योग्य बग के साथ समस्या यह है कि आप वास्तव में हॉटफ़िक्स नहीं कर सकते हैं यदि इस बीच आपका पूरा निर्माण वातावरण बदल गया। यह बहुत ज्यादा समस्या नहीं है यदि आपके पास केवल एक ही जारी किया गया संस्करण है जिसे ट्रंक के करीब रखा गया है, लेकिन अन्य सभी मामलों में यह बहुत बुरा है।
वू

1

अन्य प्रासंगिक उत्तरों के अलावा, यह भी लगता है कि आप अपने बिल्ड को सीधे मशीन पर चला रहे हैं।

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


1

यह व्यक्तिगत डेवलपर्स के आईडीई, ओएस, लाइब्रेरी कॉन्फ़िगरेशन से स्वतंत्र, बिल्ड करने के लिए एक केंद्रीकृत, तटस्थ स्थान प्रदान करता है।

एक समर्पित बिल्ड मशीन के साथ, आप इसे हर बार पुनर्निर्माण कर सकते हैं, रिपॉजिटरी में एक कोड पुश है। जब कोई बिल्ड तोड़ता है, तो प्रक्रिया तुरंत एक अलर्ट भेज सकती है ताकि समस्या को तुरंत ठीक किया जा सके।

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


4
इससे पहले किए गए 6 अंकों से अधिक अंकों की व्याख्या नहीं की गई थी और पहले 6 उत्तरों में समझाया गया था
gnat
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.