2015-03-04 6 views
9

टीमसिटी में मैंने दो एमएसबिल्ड बिल्ड चरणों के साथ एक बिल्ड कॉन्फ़िगरेशन बनाया है जो एक समाधान। एसएलएन फ़ाइल बनाना चाहिए।टीमसिटी बिल्ड कॉन्फ़िगरेशन में प्रति निर्माण चरण का उपयोग करने का उचित तरीका क्या है?

मैंने लक्ष्य को "बिल्ड" के रूप में परिभाषित किया, जब मैं बिल्ड चलाता हूं, दोनों चरण स्पष्ट रूप से मानक कॉन्फ़िगरेशन निष्पादित करते हैं और दोनों या तो डीबग या रिलीज कॉन्फ़िगरेशन दो बार बनाते हैं।

अब मैं निर्माण कदम सेटिंग्स के पास गया और CommandLine तर्क, Debug के लिए मैं /p:Configuration=Debug कहा, Release के लिए मैं /p:Configuration=Release जोड़ा पाया।

इस बिल्डिंग TeamCity की एक चेतावनी में परिणाम:

MSBuild command line parameters contain "/property:" or "/p:". It is recommended to define System Property on Build Parameters instead. 

हालांकि एक डिबग और एक रिलीज निर्माण किया गया है।

मैंने इस संदेश को गुगल किया और दो System Parameters: /p:Configuration=Debug और /p:Configuration=Release बनाया। यदि अब मैं %system.DebugConfig% पर डीबग के लिए अपनी कमांड लाइन बदलूंगा और %system.ReleaseConfig% पर रिलीज़ के लिए मुझे एक ही त्रुटि मिल जाएगी। केवल तभी मैं वास्तव में समझ गया कि उन सिस्टम पैरामीटर प्रत्येक बिल्ड चरण को हमेशा स्वचालित रूप से कभी नहीं भेजे जाएंगे।

ठीक है, लेकिन मैं डीबग बनाने और सिस्टम पैरामीटर का उपयोग करके या टीम शहर के बिना कम से कम /p शिकायत लाइन में मिली शिकायत के बिना दो अलग-अलग बिल्ड चरणों को सही ढंग से परिभाषित कैसे करूं? जो आम तौर पर -

आप अलग निर्माण चरणों ड्रॉप और इसके बजाय अलग उपयोग करने के लिए तैयार हैं, तो बजाय बनाता है:

उत्तर

4

यह करने के लिए (है कि मैं के बारे में पता, मेरे साथ सहन), लेकिन वहाँ पर्याप्त विकल्प हैं कोई तरीका नहीं है कोई समस्या नहीं होनी चाहिए, टेम्पलेट का उपयोग करें: build template बनाएं जिसमें आप कॉन्फ़िगर करने योग्य सभी पैरामीटर जोड़ते हैं, जैसे Configuration अपने मामले में और उन्हें उपयुक्त डिफ़ॉल्ट दें। फिर अपनी इच्छित संपत्तियों के प्रत्येक संयोजन के लिए एक बिल्ड कॉन्फ़िगरेशन बनाएं और उस कॉन्फ़िगरेशन में पैरामीटर को ओवरराइड करें।

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

<ItemGroup> 
    <Configurations Include="Debug;Release"/> 
</ItemGroup> 

<Target Name="Build"> 
    <MsBuild Projects="$(MyTargetProjectFile)" Targets="Build" 
      Properties="Configuration=%(Configurations.Identity)"/> 
</Target> 

फिर भी एक और विकल्प: बस TeamCity की चेतावनी की अनदेखी के रूप में नीचे एक MSBuild फ़ाइल और टीसी में एक निर्माण कदम है जो यह लक्ष्य का निर्माण है invokes और वास्तविक परियोजना फाइल करने के लिए एक MyTargetProjectFile प्रणाली पैरामीटर poiting है बनाने । यह मुझे कभी स्पष्ट नहीं था कि वे इस तरह से ऐसा करने का आग्रह करते हैं, ऐसा लगता है कि यह counterintuitive लगता है और इस तरह के प्रश्नों की ओर जाता है:] विभिन्न गुणों के साथ अलग-अलग निर्माण कदम होने की बजाय बुनियादी आवश्यकता की तरह लगता है, नहीं? मुझे नहीं लगता कि हमारे पास कोई एमएसबिल्ड चरण नहीं है जो पी/पी का उपयोग नहीं कर रहा है और यह सब ठीक काम करता है।

+0

अंतर्दृष्टि के लिए धन्यवाद।काम पर मैं वास्तव में सेटअप लागत को रोकने के लिए मास्टर एमएसबिल्ड फाइल लिखता हूं यदि कोई बिल्ड एजेंट मर जाता है (क्योंकि उनका बैक अप नहीं लिया जाता है)। उन्हें एक वैध स्थिति में वापस कॉन्फ़िगर करना हमेशा ** में दर्द होता है, इसलिए मैं वास्तव में अपने लक्ष्य बना देता हूं। मुझे लगता है कि मैं पहले टीमसिटी की चेतावनियों को अनदेखा करने के लिए चिपक जाऊंगा और जब मैं देखता हूं कि मुझे अधिक '/ p' तर्कों की आवश्यकता है तो मास्टर बनाओ। – Samuel

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