2009-07-08 15 views
92

मैंने बहुत बड़े संगठनों के लिए काम नहीं किया है और मैंने कभी ऐसी कंपनी के लिए काम नहीं किया है जिस पर "बिल्ड सर्वर" था।"बिल्ड सर्वर" का बिंदु क्या है?

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

एकमात्र जगह जिसे मैं एक बिल्ड सर्वर उपयोगी बना रहा हूं, निर्माण सर्वर के साथ लगातार एकीकरण के लिए है जो भंडार के लिए प्रतिबद्ध है। क्या मैंने अभी तक पर्याप्त परियोजनाओं पर काम नहीं किया है?

कोई, कृपया मुझे प्रबुद्ध करें: बिल्ड सर्वर का उद्देश्य क्या है?

उत्तर

85

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

Joel Spolsky on this matter.

+7

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

+1

असल में यह एक साफ चेकआउट से निर्माण के लिए एक कारण है, समर्पित निर्माण एजेंट पर समर्पित निर्माण एजेंट से नहीं -server। स्थानीय डेवलपर्स मशीन पर रिपोजिटरी के क्लीन चेकआउट में एक स्वचालित बिल्ड-स्क्रिप्ट चलाने से पहले ही समर्पित बिल्ड-सर्वर के अधिकांश फायदे मिलते हैं। – Kaiserludi

+0

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

1

हम एक का उपयोग करते हैं ताकि हम जानते हैं कि उत्पादन/परीक्षण बक्से में पुस्तकालयों के समान पुस्तकालय और संस्करण हैं जो बिल्ड सर्वर पर उपलब्ध हैं।

4

बिल्ड सर्वर का उपयोग हर किसी के कोड को चेक इन करने के लिए किया जाता है। आपका कोड स्थानीय रूप से संकलित हो सकता है, लेकिन संभवतः आपके पास हर समय हर किसी के द्वारा किए गए सभी परिवर्तन नहीं होंगे।

2

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

मैं भी संस्थापक बनाने के लिए इसका इस्तेमाल करते हैं, क्योंकि ये बहुत समय लेने के कोड पर हस्ताक्षर करने आदि

1

यह प्रबंधन और हमारे लिए परीक्षण के बारे में है। एक बिल्ड सर्वर के साथ हम हमेशा जानते हैं कि हम संस्करण नियंत्रण से हमारी मुख्य "ट्रंक" लाइन बना सकते हैं। हम एक-क्लिक के साथ एक मास्टर इंस्टॉल बना सकते हैं और इसे वेब पर प्रकाशित कर सकते हैं। हम यह सुनिश्चित करने के लिए प्रत्येक बार कोड चेक किए जाने पर हमारे सभी यूनिट परीक्षण चला सकते हैं। इन सभी कार्यों को एक ही मशीन में एकत्र करके यह बार-बार इसे प्राप्त करना आसान बनाता है।

0

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

3

पिछले संस्करणों (और कॉन्फ़िगरेशन परिवर्तन) के कलाकृतियों से मुक्त "स्वच्छ" वातावरण होना आवश्यक है ताकि यह सुनिश्चित किया जा सके कि काम करता है और परीक्षण करता है और कलाकृतियों पर निर्भर नहीं होता है। एक अलग निर्माण सर्वर बनाने के लिए अलग करने का एक प्रभावी तरीका है।

5

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

3

ये मशीनें कई कारणों से उपयोग की जाती हैं, सभी बेहतरीन उत्पाद प्रदान करने में आपकी सहायता करने की कोशिश कर रहे हैं।

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

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

4

मैं स्थिरता, tracability, और पुनरुत्पादन के संबंध में अब तक के उत्तरों से सहमत हूं। (बहुत सारे 'ity है, है ना?)। कई बिल्डिंग सर्वरों के साथ बड़ी कंपनियों (हेल्थ केयर, फाइनेंस) के लिए कभी भी काम करने के बाद, मैं यह भी जोड़ूंगा कि यह सुरक्षा के बारे में भी है। कभी फिल्म ऑफिस स्पेस देखा? यदि एक असंतुष्ट डेवलपर अपनी स्थानीय मशीन पर बैंकिंग एप्लिकेशन बनाता है और कोई और इसे देखता है या इसका परीक्षण नहीं करता है ... BOOM। सुपरमैन III।

+0

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

0

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

+0

आईएमएचओ, यह निम्न स्तर के बनाम उच्च स्तरीय भाषाओं के बारे में इतना नहीं है, बल्कि सी के टूटा हुआ/गैर-मौजूदा मॉड्यूल सिस्टम (यानी फाइलें शामिल हैं) बनाम भाषाओं के साथ बनाम मॉड्यूल सिस्टम के बारे में बहुत कुछ नहीं है। –

1

आप सही हैं कि डेवलपर अपनी मशीनों पर निर्माण कर सकते हैं।

लेकिन इन बातों को हमारे बिल्ड सर्वर हमें खरीदता में से कुछ हैं, और हम शायद ही परिष्कृत निर्माण निर्माताओं कर रहे हैं:

  • संस्करण नियंत्रण मुद्दों (कुछ पहले प्रतिक्रिया में उल्लेख किया गया है)
  • क्षमता। देवताओं को स्थानीय रूप से निर्माण करने के लिए रुकना नहीं है। वे इसे सर्वर पर लात मार सकते हैं और अगले कार्य पर जा सकते हैं। यदि बिल्ड बड़े हैं, तो यह भी अधिक समय है कि देव की मशीन पर कब्जा नहीं किया गया है। लगातार एकीकरण और स्वचालित परीक्षण करने वाले लोगों के लिए, बेहतर भी।
  • केंद्रीकरण। हमारी बिल्ड मशीन में ऐसी स्क्रिप्ट होती हैं जो बिल्ड बनाती हैं, इसे यूएटी वातावरण में वितरित करती हैं, और यहां तक ​​कि उत्पादन स्टेजिंग तक भी। उन्हें एक ही स्थान पर रखने से उन्हें सिंक में रखने की परेशानी कम हो जाती है।
  • सुरक्षा। हम यहां बहुत खास नहीं करते हैं, लेकिन मुझे यकीन है कि एक sysadmin ऐसा कर सकता है कि उत्पादन माइग्रेशन टूल केवल कुछ अधिकृत इकाइयों द्वारा बिल्ड सर्वर पर ही पहुंचा जा सकता है।
1

हो सकता है कि मैं केवल एक ही हूँ ...

मुझे लगता है कि हर कोई इससे सहमत हैं कि एक

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

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

जब आप रिलीज़ संस्करण करना चाहते हैं, तो आप रिपोजिटरी से एक बिल्ड चलाते हैं।और मुझे पूरा यकीन है कि आप रिपॉजिटरी में संस्करण को पर समय पर टैग करना चाहते हैं और सर्वर के काम के हर छह घंटे नहीं।

तो, शायद एक "बिल्ड सर्वर" सिर्फ एक गलत नामक है और यह वास्तव में एक "निरंतर परीक्षण सर्वर" है। अन्यथा यह बहुत बेकार लगता है।

26

उनका उद्देश्य क्या है?
डेवलपर मशीनों का भार लें, निर्माण के लिए एक स्थिर, पुनरुत्पादित वातावरण प्रदान करें।

डेवलपर्स अपनी स्थानीय मशीनों पर परियोजना का निर्माण क्यों नहीं कर रहे हैं, या वे हैं?
जटिल सॉफ्टवेयर के साथ, आश्चर्यजनक रूप से कई चीजें गलत हो सकती हैं जब "संकलन" होती है। जिन समस्याओं का मैंने वास्तव में सामना किया है:

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

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

क्या कुछ परियोजनाएं इतनी बड़ी हैं कि उचित समय में इसे बनाने के लिए अधिक शक्तिशाली मशीनों की आवश्यकता है?

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

क्या मैंने अभी तक पर्याप्त परियोजनाओं पर काम नहीं किया है?

आकार निश्चित रूप से एक कारक है, लेकिन केवल एक ही नहीं है।

42

बिल्ड सर्वर कई कारणों से महत्वपूर्ण हैं।

  • वे पर्यावरण स्थानीय Code Monkey developer कहते हैं, "यह मेरी मशीन पर संकलित" जब यह तुम्हारा पर संकलन नहीं होगा अलग। इसका मतलब सिंक-ऑफ-सिंक चेक-इन हो सकता है या इसका मतलब यह हो सकता है कि एक निर्भर लाइब्रेरी गुम है। जार नरक उतना बुरा नहीं है जितना कि डीएल नरक; किसी भी तरह से, एक बिल्ड सर्वर का उपयोग करना सस्ता बीमा है कि आपके निर्माण गलती से गलत पुस्तकालयों को रहस्यमय रूप से विफल या पैकेज नहीं करेंगे।

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

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

+12

+1 प्रोग्रामर को अपने निर्माण वातावरण में परिवर्तन दस्तावेज करने के लिए हो रही है जैसे कि बिल्लियों को हड़ताली करना। वे बस याद नहीं कर सकते कि किस चरण में उन्होंने अपने नेट या बूस्ट लिब को अपडेट किया, अगर उन्हें पता चला कि उन्होंने इसे बिल्कुल किया है। एक दैनिक सर्वर कर रहे एक केंद्रीय सर्वर को कोड में चेक करने के बाद शाम को अधिनियम में पकड़ लेता है- और कहा जा रहा है कि कुछ भी प्रेरित नहीं है, "आपने टीम के निर्माण को तोड़ दिया, आप क्या भूल गए?" – kmarsh

0

एक बिल्ड सर्वर आमतौर पर बड़े भंडार है कि कभी कभी कुछ घंटों की तुलना में अधिक समय लग सकता है में स्थित परियोजनाओं के (जैसे हर रात को बनाता है) कार्यों संकलन शेड्यूल करने के लिए प्रयोग किया जाता है।

0

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

3

क्या पहले से ही कहा गया है पर जोड़ने के लिए:

एक पूर्व-सहयोगी माइक्रोसॉफ्ट ऑफिस टीम पर काम किया और मुझे बताया था एक पूरा का निर्माण कभी कभी 9 घंटे लगे। यह पर आपकी मशीन पर ऐसा करने के लिए चूसना होगा, है ना?

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