2009-09-17 3 views
9

Joelthink highly of daily builds पर प्रतीत होता है। एक पारंपरिक संकलित आवेदन के लिए मैं निश्चित रूप से उसका औचित्य देख सकता हूं, लेकिन यह वेब विकास के समानांतर कैसे है - या नहीं?क्या दैनिक वेब ऐप के लिए जाने का तरीका बनता है?

मैं जिस परियोजना के लिए पूछ रहा हूं उसके बारे में थोड़ा सा - Django (पायथन) वेब ऐप पर काम कर रहे 2 डेवलपर हैं। हमारे पास 1 svn भंडार है। प्रत्येक डेवलपर एक चेकआउट और स्थानीय रूप से चल रहे MySQL की अपनी प्रतिलिपि बनाए रखता है (यदि आप Django से अपरिचित हैं, तो यह अपने स्वयं के परीक्षण सर्वर के साथ बंडल हो जाता है, एएसपी ऐप्स विजुअल स्टूडियो के अंदर कितना रास्ता चला सकता है)। विकास और परीक्षण स्थानीय रूप से किया जाता है, फिर भंडार में वापस प्रतिबद्ध किया जाता है। वेबसाइट की वास्तविक कार्य प्रति एक एसवीएन चेकआउट है (मुझे एसवीएन निर्यात के बारे में पता है और इसमें बहुत अधिक समय लगता है)। हमारे पास 'बिल्ड' के सबसे नज़दीक एक बैच फ़ाइल है जो कार्यशील प्रतिलिपि पर एक एसवीएन अपडेट चलाती है, django बिट्स ('manage.py syncdb') करता है, खोज इंजन कैश (solr) अद्यतन करता है, फिर अपाचे को पुनरारंभ करता है।

मुझे लगता है कि जो मैं नहीं देखता वह वेब ऐप्स के समानांतर है।

क्या आप 'रात के निर्माण' के साथ एक स्रोत नियंत्रित वेब ऐप कर रहे हैं - यदि हां, तो ऐसा कैसा दिखता है?

उत्तर

11

आप अपने रात के निर्माण के रूप में Django परीक्षण ढांचे के माध्यम से आसानी से अपने सभी Django इकाई परीक्षण चला सकते हैं।

हम यही करते हैं।

हमारे पास कुछ साधारण यूनिट परीक्षण भी हैं जो Django सुविधाओं का लाभ नहीं उठाते हैं, और हम उन्हें भी चलाते हैं।

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

हम पाइथन 2 को देखने के गले में हैं।6 (जो हमारे लिए पूरी तरह से काम करता है) और -3 विकल्प के साथ हमारे यूनिट परीक्षण चला रहा है यह देखने के लिए कि हम किस बहिष्कृत सुविधाओं का उपयोग कर रहे हैं। यूनिट परीक्षणों का पूरा सूट होने से हमें आश्वासन मिलता है कि पायथन 3 संगतता में बदलाव निर्माण को तोड़ नहीं देगा। और उन्हें रात का मतलब है कि हमें होना चाहिए हम सही तरीके से पुन: सक्रिय कर रहे हैं।

+1

+1 डायनामिक भाषाओं में वेब ऐप्स को अक्सर "बिल्ड" की आवश्यकता नहीं होती है, लेकिन निरंतर एकीकरण परीक्षण की अत्यधिक अनुशंसा की जाती है। –

3

यदि आपके पास इसके आसपास सही प्रक्रियाएं हैं तो निरंतर एकीकरण उपयोगी होता है। JetBrains से TeamCity एक महान शुरुआती बिंदु है, तो आप परिचित का निर्माण करना चाहते है:

http://www.jetbrains.com/teamcity/index.html

वहाँ एक महान लेख कि Django यहाँ से सीधे जुड़ा हुआ है:

http://www.ajaxline.com/continuous-integration-in-django-project

आशा इस हो जाता है आप शुरू कर दिया।

3

गतिशील भाषाओं में बनाए गए वेब अनुप्रयोगों को "संकलन" चरण की आवश्यकता नहीं हो सकती है, लेकिन ऐप चलाने में शामिल कई "बिल्ड" चरण भी हो सकते हैं। आपकी बिल्ड स्क्रिप्ट निर्भरता को स्थापित या अपग्रेड कर सकती हैं, डेटाबेस माइग्रेशन निष्पादित कर सकती हैं, और उसके बाद यह सुनिश्चित करने के लिए परीक्षण सूट चलाएं कि कोड "साफ" w.r.t है। भंडार में वास्तविक चेक-इन संस्करण। या, आप कोड की प्रतिलिपि परीक्षण सर्वर पर तैनात कर सकते हैं, फिर नए संस्करण के खिलाफ सेलेनियम एकीकरण परीक्षणों का एक सेट चलाएं ताकि यह सुनिश्चित किया जा सके कि मूल साइट कार्यक्षमता अभी भी काम करती है।

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

+0

+1 पहला जवाब होने के लिए मैंने देखा कि निर्माण प्रक्रिया के गैर-संकलन पहलुओं के विचारों को निरंतर एकीकरण के सुझाव के साथ जोड़ता है। एफडब्ल्यूआईडब्ल्यू, मुझे एक वेबपैप के लिए क्रूज़ कंट्रोल के साथ शुभकामनाएं मिली हैं। – rmeador

1

निरंतर एकीकरण के लिए Hudson का उपयोग करके मुझे बड़ी सफलता मिली है। Redsolo द्वारा पाइथन के साथ हडसन का उपयोग करने पर विवरण।

कुछ महीने पहले, continuous deployment का उपयोग करने वाले कई लेखों ने ऑनलाइन हलचल की वजह से कई हलचल किए। IMVU पर विवरण है कि वे कैसे deploy up to 5 times a day

1

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

2

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

मैं कहूंगा कि रात के निर्माण के बराबर वेब ऐप स्टेजिंग साइट्स (जिसे रात में बनाया जा सकता है) होगा।

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

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

तो, अंत में, सेटअप जहां मैं काम करते हैं:

  • हर डेवलपर अपने स्वयं के सैंडबॉक्स स्थानीय रूप से चलाता है (एक ही आप यह कर के रूप में)
  • एक "आम" एक देव सर्वर पर मंचन सैंडबॉक्स यह है कि एक cronjob से रात को अद्यतन हो जाता है। पीएम, ग्राहक, और क्यूए वहां जाते हैं। उन्हें कभी डेवलपर सैंडबॉक्स तक सीधे पहुंच नहीं दी जाती है।
  • उत्पादन में एक स्वचालित (हालांकि मैन्युअल रूप से आरंभ किया गया) तैनाती है। एक डेवलपर या पीएम उत्पादन के लिए "धक्का" दे सकता है जब हमें लगता है कि चीजें पर्याप्त रूप से QA'd हैं और स्थिर और सुरक्षित हैं।

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

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

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