2008-08-18 10 views
26

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

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

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

प्रासंगिक उपकरण: दृश्य बिल्ड स्रोत सुरक्षित 6.0 (मुझे पता है, लेकिन मैं या नहीं, हम इस समय स्रोत सुरक्षित उपयोग के बारे में कुछ नहीं कर सकते कि अगले लड़ाई मैं लड़ना हो सकता है।।)

अस्थायी तौर पर इस मैं एक दृश्य बिल्ड परियोजना है कि यह करता है:

  1. प्राप्त स्रोत और जगह परियोजना के लिए आवश्यक आवश्यक DLLs सहित स्थानीय निर्देशिका, में।
  2. कॉन्फ़िगरेशन फ़ाइलें प्राप्त करें और आवश्यकतानुसार नाम बदलें (हम उन्हें एक विशेष उप निर्देशिका में संग्रहीत कर रहे हैं जो वास्तविक एप्लिकेशन का हिस्सा नहीं है, और इन्हें उपयोग के अनुसार नामित किया गया है)।
  3. दृश्य स्टूडियो का उपयोग कर
  4. precompile कमांड लाइन का उपयोग कर, क्या गंतव्य के लिए एक "का निर्माण" निर्देशिका
  5. कॉपी हो जाएगा में कॉपी करने बिल्ड।
  6. कोई आवश्यक अतिरिक्त संसाधन प्राप्त करें - ज्यादातर दस्तावेज, छवियों और परियोजनाओं से संबंधित रिपोर्ट जैसे कि परियोजना से जुड़े हैं (और चरण 5 से निर्देशिका में डालें)। इस सामान में बहुत कुछ है, और मैं इसे पहले शामिल नहीं करना चाहता था। हालांकि, मैं केवल बदली गई वस्तुओं की प्रतिलिपि बनाने जा रहा हूं, इसलिए शायद यह अप्रासंगिक है। मुझे यकीन नहीं था कि मैं वास्तव में पहले के चरणों में इस सामान को शामिल करना चाहता था।

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

क्या किसी को भी कोई सलाह या सुझाव देने के लिए है? वर्तमान में हम एक परिनियोजन परियोजना का उपयोग नहीं कर रहे हैं, मैं ध्यान दूंगा। यह इस बिल्ड में आवश्यक कुछ कदमों को हटा देगा (जैसे web.config स्वैपिंग)।

उत्तर

18

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

  1. पहले स्वचालित कोड प्रोग्राम (यानी नेंट/एमएसबिल्ड) का उपयोग करके एक चरण के साथ अपना कोड संकलित करें। मैं बहस नहीं कर रहा हूं कि कौन सा बेहतर है। वह व्यक्ति ढूंढें जो आपको सहज महसूस करता है और इसका उपयोग करता है। प्रोजेक्ट के साथ स्रोत नियंत्रण में बिल्ड स्क्रिप्ट लाइव रहें।
  2. यह पता लगाएं कि आप अपने स्वचालित निर्माण को कैसे ट्रिगर करना चाहते हैं। चाहे वह क्रूज़ कंट्रोल तक पहुंच रहा हो या अनुसूचित कार्य का उपयोग करके रात का निर्माण कार्य चला रहा हो। क्रूज़ कंट्रोल या टीमसिटी शायद इसके लिए सबसे अच्छा विकल्प है, क्योंकि इसमें बहुत से टूल्स शामिल हैं जिनका उपयोग आप इस चरण को आसान बनाने के लिए कर सकते हैं। क्रूज़ कंट्रोल मुफ्त है और टीमसिटी एक बिंदु पर मुफ़्त है, जहां परियोजना के लिए कितना बड़ा है इसके आधार पर आपको इसके लिए भुगतान करना पड़ सकता है।
  3. ठीक है, इस बिंदु से आप उपकरण के साथ बहुत सहज होंगे। अब आप परीक्षण, तैनाती और आदि के लिए जो करना चाहते हैं उसके आधार पर अधिक कार्य जोड़ने के लिए तैयार हैं ...

आशा है कि इससे मदद मिलती है।

9

मेरे पास पावरहेल स्क्रिप्ट का एक सेट है जो मेरे लिए यह सब करता है।

स्क्रिप्ट 1: बिल्ड - यह एक आसान है, इसे ज्यादातर एमएसबिल्ड के लिए कॉल द्वारा संभाला जाता है, और यह मेरी डेटाबेस स्क्रिप्ट बनाता है।

स्क्रिप्ट 2: पैकेज - यह विभिन्न वातावरणों जैसे परीक्षण, और उत्पादन पर्यावरण के सबसेट के लिए रिलीज पैकेज करने के लिए विभिन्न तर्क लेता है, जिसमें कई मशीनें होती हैं।

स्क्रिप्ट 3: परिनियोजित करें - इसमें पैकेज स्क्रिप्ट के द्वारा बनाई गई फ़ोल्डर के भीतर से प्रत्येक व्यक्ति मशीन पर चलाया जाता है

तैनाती स्क्रिप्ट से (तैनात लिपि में पैकेजिंग के एक भाग के रूप में कॉपी किया जाता है), मैं विवेक करना मशीन नाम जैसी चीज़ों पर जांच करता है ताकि चीजें गलती से गलत जगह पर तैनात न हों।

web.config फ़ाइलों के लिए, मैं

<appSettings file="Local.config"> 

सुविधा का उपयोग ओवरराइड कि उत्पादन मशीनों पर पहले से ही कर रहे हैं के लिए, और वे केवल पढ़ने के लिए कर रहे हैं ताकि वे गलती से लिखा नहीं मिलता है। Local.config फ़ाइलों की जांच नहीं की जाती है, और मुझे बिल्ड समय पर कोई फ़ाइल स्विचिंग करने की आवश्यकता नहीं है।

[संपादित करें] appSettings फ़ाइल के बराबर = एक config अनुभाग के लिए configSource = "Local.config"

1

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

कहा जा रहा है कि, कोई भी स्वचालित निर्माण स्वचालित निर्माण से बेहतर है।

5

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

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

वहाँ एक बहुत अच्छी यहाँ परिचय है: introduction

1

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

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

अंत में हमारे पास एक समर्पित निर्माण मशीन है जो हर रात ट्रंक और रखरखाव शाखाओं का पुनर्निर्माण करती है और किसी भी समस्या के साथ एक ईमेल भेजती है या यदि यह सफलतापूर्वक पूर्ण हो जाती है।

0

हमारा निर्माण प्रणाली एक मेकफ़ाइल (या दो) है। यह काम करने में मजेदार रहा है क्योंकि इसे दोनों खिड़कियों (वीएस के तहत एक बिल्ड कार्य के रूप में) और लिनक्स के तहत (सामान्य "मेला ब्लै" कार्य के रूप में) चलाने की जरूरत है। वास्तव में मजेदार बात यह है कि बिल्ड को .csproj फ़ाइल से वास्तविक फ़ाइल सूची मिलती है, उस से (अन्य) मेकफ़ाइल बनाता है, और इसे चलाता है। प्रक्रियाओं में मेक फ़ाइल वास्तव में इसे स्वयं कहती है।

यदि वह विचार पाठक को डराता नहीं है, तो (या तो वे पागल हैं या) वे शायद उनके लिए काम करने के लिए + "आपकी पसंदीदा स्ट्रिंग मैंगलर" बना सकते हैं।

1

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

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

0

हम अपरक्यूटी का उपयोग करते हैं। अपरक्यूटी निर्माण करने के लिए NANT का उपयोग करता है और इसका उपयोग करना बेहद आसान है।

http://code.google.com/p/uppercut/

कुछ अच्छी यहाँ स्पष्टीकरण: UppercuT

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