2008-08-15 17 views
24

मेरे पास क्रूज़ कंट्रोल.NET संस्करण 1.4 है जो मेरे विकास सर्वर पर स्थापित है। जब भी कोई डेवलपर कोड में जांच करता है, तो यह संकलन करता है।आप CruiseControl.NET के माध्यम से एक क्लिकऑन एप्लिकेशन कैसे प्रकाशित कर सकते हैं?

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

मुझे CruiseControl.NET के साथ ऐसा करने का कोई तरीका नहीं मिल रहा है। हम बिल्ड करने के लिए एमएसबीयूआईएलडी का उपयोग कर रहे हैं।

उत्तर

12

सभी मदद के लिए धन्यवाद:

यहाँ अपने निर्माण स्क्रिप्ट देखा की तरह है। हमने जो अंतिम समाधान लागू किया वह हर उत्तर से थोड़ा सा लिया।

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

यहां हमारे "ccnet.config" फ़ाइल का कार्य क्षेत्र है।

<!-- override settings --> 
<exec> 
    <executable>F:\Source\Project\Environment\CruiseControl\CopySettings.bat</executable> 
</exec> 

<!-- compile --> 
<msbuild> 
    <executable>C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe</executable> 
    <workingDirectory>F:\Source\Project\Environment\</workingDirectory> 
    <projectFile>Project.sln</projectFile> 
    <buildArgs>/noconsolelogger /p:Configuration=Debug /v:diag</buildArgs> 
    <targets>Rebuild</targets> 
    <timeout>0</timeout> 
    <logger>ThoughtWorks.CruiseControl.MsBuild.XmlLogger,ThoughtWorks.CruiseControl.MsBuild.dll</logger> 
</msbuild> 

<!-- clickonce publish --> 
<exec> 
    <executable>F:\Source\Project\Environment\CruiseControl\Publish.bat</executable> 
</exec> 

पहली बात तो आप देखेंगे कि CopySettings.bat चलाता है। यह पर्यावरण कनेक्शन के लिए विशिष्ट सेटिंग्स की प्रतिलिपि बनाता है, जैसे डेटाबेस कनेक्शन।

अगला, मानक MSBUILD कार्य चलता है। किसी भी संकलन त्रुटियों को यहां पकड़ा जाता है और सामान्य के रूप में संभाला जाता है।

निष्पादित करने की आखिरी चीज़ Publish.bat है। यह वास्तव में कमांड लाइन से एमएसबीयूआईएलडी "पुनर्निर्माण" करता है, और क्रूज़ कंट्रोल के पैरामीटर स्वचालित रूप से पारित और निर्मित होते हैं। इसके बाद, एमएसबीयूआईएलडी को "प्रकाशित" लक्ष्य के लिए बुलाया जाता है। प्रकाशन के लिए सटीक समान पैरामीटर दिए जाते हैं क्योंकि पुनर्निर्माण जारी किया गया था। यह निर्माण संख्या को सिंक में रखता है। इसके अलावा, हमारे निष्पादन योग्य नाम अलग-अलग हैं (यानी - प्रोजेक्टडेव और प्रोजेक्टटेस्ट)। हम अलग-अलग संस्करण संख्याओं और नामों के साथ समाप्त होते हैं, और यह क्लिकऑन को अपनी चीज़ करने की अनुमति देता है।

Publish.bat का अंतिम भाग वास्तविक फ़ाइलों को उनके नए घरों में प्रतिलिपि बनाता है। हम publ.htm का उपयोग नहीं करते हैं क्योंकि हमारे सभी उपयोगकर्ता नेटवर्क पर हैं, हम उन्हें अपने डेस्कटॉप पर मैनिफेस्ट फ़ाइल के लिए शॉर्टकट देते हैं और वे उस संस्करण संख्या के साथ सही निष्पादन योग्य पर क्लिक करके हमेशा चल रहे हैं क्रूज नियंत्रण।

यहाँ

XCOPY "F:\Source\Project\Environment\CruiseControl\Project\app.config" "F:\Source\Project\Environment\Project" /Y /I /R 
XCOPY "F:\Source\Project\Environment\CruiseControl\Project\My Project\Settings.Designer.vb" "F:\Source\Project\Environment\Project\My Project" /Y /I /R 
XCOPY "F:\Source\Project\Environment\CruiseControl\Project\My Project\Settings.settings" "F:\Source\Project\Environment\Project\My Project" /Y /I /R 

CopySettings.bat है और अंत में, यहाँ, Publish.bat

C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe /target:rebuild "F:\Source\Project\Environment\Project\Project.vbproj" /property:ApplicationRevision=%CCNetLabel% /property:AssemblyName="ProjectEnvironment" /property:PublishUrl="\\Server\bin\Project\Environment\\" 
C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe /target:publish "F:\Source\Project\Environment\Project\Project.vbproj" /property:ApplicationVersion="1.0.0.%CCNetLabel%" /property:AssemblyVersion="1.0.0.%CCNetLabel%" /property:AssemblyName="ProjectEnvironment" 

XCOPY "F:\Source\Project\Environment\Project\bin\Debug\app.publish" "F:\Binary\Project\Environment" /Y /I 
XCOPY "F:\Source\Project\Environment\Project\bin\Debug\app.publish\Application Files" "F:\Binary\Project\Environment\Application Files" /Y /I /S 

जैसा कि मैंने कहा है यह शायद रास्ता है कि CruiseControl और MSBuild डेवलपर्स के लिए चीजों को चाहते थे, नहीं किया है काम, लेकिन यह काम करता है। अगर आपको कल यह काम करने की ज़रूरत है, तो यह वह समाधान हो सकता है जिसे आप ढूंढ रहे हैं। सौभाग्य!

-1

आप msbuild में क्लिकऑन मेनिफेस्ट जनरेशन कार्यों का उपयोग करना चाहते हैं। प्रक्रिया थोड़ी देर तक घुमाया गया है, इसलिए मैं आपको कुछ लिंक पर इंगित करने जा रहा हूं। उम्मीद है कि आप शुरू करने के लिए reference on msdn और sample article यहां हैं।

22

हमने यह किया है और आपको कुछ पॉइंटर्स शुरू करने के लिए दे सकते हैं।

2 बातें आप के बारे में पता होना चाहिए:

  • MSBuild आप के लिए आवश्यक तैनाती फ़ाइलें उत्पन्न कर सकते हैं।
  • एमएसबिल्ड फाइलों को एफ़टीपी या यूएनसी शेयर में तैनात नहीं करेगा। इसके लिए आपको एक अलग कदम की आवश्यकता होगी।

MSBuild का उपयोग करने के ClickOnce प्रकट होता है उत्पन्न करने के लिए, यहाँ आदेश जारी करने के लिए आप की आवश्यकता होगी:

msbuild /target:publish /p:Configuration=Release /p:Platform=AnyCPU; "c:\yourProject.csproj" 

कि MSBuild बता बिन अंदर अपनी परियोजना का निर्माण और ClickOnce तैनाती फ़ाइलें उत्पन्न करने के लिए होगा \ रिलीज \ YourProject.publish निर्देशिका।

जो कुछ भी बचा है, वह उन फ़ाइलों को एफ़टीपी/यूएनसी शेयर/कहीं भी कॉपी करना है, और आप सभी सेट हैं।

आप उन MSBuild पैरामीटर का उपयोग करने के लिए CruiseControl.NET को बता सकते हैं।

आपको जेनरेट की गई तैनाती फ़ाइलों को लेने और उन्हें एफ़टीपी या यूएनसी शेयर में कॉपी करने के लिए क्रूज़ कंट्रोल.NET बिल्ड कार्य की आवश्यकता होगी। हम इसके लिए एक कस्टम छोटे सी # कंसोल प्रोग्राम का उपयोग करते हैं, लेकिन आप आसानी से पावरहेल स्क्रिप्ट का उपयोग कर सकते हैं।

+0

मैं बस यह इंगित करना चाहता हूं कि यह थोड़ा पुराना है। यह मानते हुए कि आपकी पोस्ट सही थी, एमएसबील्ड को यूएनसी शेयरों को तैनात करने के लिए अद्यतन किया गया है, जो अब मैं कई सक्रिय परियोजनाओं में करता हूं। –

+0

धन्यवाद, जेम्स। हाँ, यह मूल रूप से 2008 में उत्तर दिया गया था, जब यह सब ताजा और सेक्सी था; यह 7 साल बाद प्रासंगिक नहीं हो सकता है। –

4

मुझे याद है कि पिछले साल एक क्लिकऑन प्रोजेक्ट के लिए मैं काम कर रहा था। मुझे याद है कि यह मुझे हमेशा के लिए लेने के लिए ले रहा है लेकिन यहां यह है। मैं अपनी स्क्रिप्ट्स को जो करना चाहता था वह एक अलग इंस्टॉलर उत्पन्न करना था जो हमारे देव env और प्रोड के लिए एक अलग व्यक्ति को इंगित करता था। इतना ही नहीं, लेकिन मुझे सही संस्करण जानकारी को इंजेक्ट करने की आवश्यकता थी ताकि मौजूदा क्लाइंट 'एहसास' कर सकें कि वहाँ एक नया संस्करण है जो क्लिकऑन का पूरा बिंदु है। इस स्क्रिप्ट में आपको अपने सर्वर नामों के साथ प्रतिस्थापित करना होगा। यह चाल publ.htm और project.publish फ़ाइल को सहेजना है और CC.NET द्वारा प्रदान किए गए संस्करण के आधार पर नया संस्करण संख्या इंजेक्ट करना है।

<target name="deployProd"> 
    <exec program="<framework_dir>\msbuild.exe" commandline="<project>/<project>.csproj /property:Configuration=PublishProd /property:ApplicationVersion=${build.label}.*;PublishUrl=\\<prod_location>\binups$\;InstallUrl=\\<prod_location>\binups$\;UpdateUrl=\\<prod_location>\binups$\;BootstrapperComponentsUrl=\\<prod_location>\prereqs$\ /target:publish"/> 

    <copy todir="<project>\bin\PublishProd\<project>.publish"> 

    <fileset basedir="."> 
     <include name="publish.htm"/> 
    </fileset> 

    <filterchain> 
     <replacetokens> 
     <token key="CURRENT_VERSION" value="${build.label}"/> 
     </replacetokens> 
    </filterchain> 
    </copy> 

</target> 

आशा इस मदद करता है

0

बस CCNET.config msbuild कार्य में $ {CCNetLabel} को पार करने में सक्षम होना एक बड़ा सुधार होगा।

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

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