2013-09-04 2 views
8

मैं वर्तमान में एक समाधान बनाने के लिए टीएफएस और नियमित निर्माण प्रक्रिया गतिविधि का उपयोग कर रहा हूं। हालांकि, मैं तैनाती को स्वचालित करने में सक्षम होना चाहता हूं ताकि मैं एक चरण में सर्वर पर दूरस्थ रूप से निर्माण और तैनाती कर सकूं।टीएफएस एमएसबिल्ड args/p: DeployOnBuild = सच कुछ भी नहीं प्रतीत होता है

एमएसबिल्ड तर्कों पर मैं तैनाती स्विच निर्दिष्ट करने की कोशिश कर रहा हूं। मेरा प्रोजेक्ट एक विंडोज़ सेवा है, लेकिन मुझे लगता है कि प्रोजेक्ट प्रकार (वेब ​​प्रोजेक्ट नहीं होने पर) के बावजूद किसी भी बाइनरी को तैनात करना अभी भी संभव है।

वर्तमान निर्माण पैरामीटर:

/p:DeployOnBuild=True /p:UserName=user /p:Password=password 

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

+0

आपको इसे एक प्रकाशन प्रोफ़ाइल देना होगा। –

+2

प्रकाशित प्रोफ़ाइल केवल वेब प्रोजेक्ट के साथ काम करता है। – suresh2

+0

@ सुरेश 2 क्या उन्हें मैन्युअल रूप से बनाया नहीं जा सकता है और अभी भी msbuild द्वारा उपयोग किया जा सकता है? आखिरकार, एमएसबिल्ड अभी भी एक कमांड लाइन प्रोग्राम है जिसे तर्क के साथ बुलाया जाता है। – jaffa

उत्तर

21

भविष्य के संदर्भ के लिए, मुझे वेब सेवाओं/परियोजनाओं के अलावा किसी अन्य चीज़ के लिए तैनाती को सक्षम करने के लिए वास्तव में क्या आवश्यक है। कारण DeployOnBuild पैरामीटर वेब परियोजनाओं के अलावा और कुछ के लिए कुछ भी नहीं है कि प्रोजेक्ट फाइल webapplication.targets और यह भी एक PropertyGroupVSToolsPath के लिए पथ युक्त शामिल करने के लिए की जरूरत है।

इस कड़ी यहाँ मुझे कैसे वेब तैनाती काम करने के लिए और कैसे अपने प्रोजेक्ट में इस एकीकृत करने के लिए सेवाओं को तैनात करने के रूप में एक अच्छा परिचय दिया:

http://www.asp.net/web-forms/tutorials/deployment/web-deployment-in-the-enterprise/building-and-packaging-web-application-projects

1) MSBuild में मानकों आप एक की जरूरत पास करने के लिए। आपके प्रोजेक्ट गुण फ़ोल्डर के अंतर्गत PublishProfiles फ़ोल्डर के भीतर pubxml फ़ाइल (प्रकाशन प्रोफ़ाइल कहा जाता है)।

2) मैं .csproj फ़ाइल में निम्नलिखित की जरूरत:

<PropertyGroup> 
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">11.0</VisualStudioVersion> 
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath> 
    </PropertyGroup> 

    <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 
    <Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" /> 
    <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" /> 

3) आप MSDeploy के पूर्व सिंक/पोस्ट-सिंक आदेशों की जरूरत है, दुर्भाग्य से इस MSBuild से उपलब्ध नहीं है। इस कार्यक्षमता को प्राप्त करने के लिए आपको अपने प्रोजेक्ट रूट फ़ोल्डर के अंदर X.Wpp.Targets (जहां एक्स आपका प्रोजेक्ट नाम है) होना चाहिए।

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

    <Target Name="UninstallService" BeforeTargets="MSDeployPublish">  

     <!-- Do exec tasks here --> 

    </Target> 

    <Target Name="InstallService" AfterTargets="MSDeployPublish">  

     <!-- Do exec tasks here --> 

    </Target> 

</Project> 
-1

आपको MSBuild का उपयोग कर विंडोज सेवाओं को तैनात करने का एक तरीका चाहिए। इस विधि को आजमाएं http://mrchief.calepin.co/deploying-windows-service-via-msbuild/

+0

आपकी मदद के लिए धन्यवाद लेकिन मैं उपरोक्त को पाइपलाइन का उपयोग करके वेब प्रोजेक्ट परिनियोजन के रूप में प्राप्त करना चाहता था। यह WPP का उपयोग करके प्राप्त किया जा सकता है (नीचे जवाब देखें)। – jaffa

+0

@jaffa ग्रेट। क्या वेब डिप्लॉयमेंट दृष्टिकोण आपके काम के अनुसार काम कर रहा है? – suresh2

+0

हां यह ठीक काम कर रहा है धन्यवाद। मुझे यकीन नहीं था कि आपके परिनियोजन सेवा लक्ष्य को कैसे कहा जाता है। मैं MSDeployPublish के साथ MSBuild 4.0 की पहले/AfterTargets सुविधा का उपयोग कर रहा हूं। – jaffa

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