2010-10-08 11 views
5

मैं सिर्फ अपने दम पर पहली बार के लिए सेटअप teamcity करने के बारे में हूँ। मुझे सबसे ज्यादा तरीकों से बहुत अच्छा और सरल कहना है। हालांकि, मेरे पास एक मुद्दा है कि मैंने हल करने और किसी भी जानकारी को खोजने का प्रबंधन नहीं किया है।फ़ाइल प्रकारों को शामिल न करें teamcity कलाकृतियों में

जब मैं अपने कलाकृतियों को प्रकाशित करना चाहते हैं मैं कुछ फ़ाइल प्रकारों को छोड़ करना चाहते हैं।

उदाहरण:

%system.agent.work.dir%\trunk\Source\Projects\Webproject.Web/Controllers => Webproject.Web/Controllers 

हालांकि, मैं नहीं चाहता कि फ़ोल्डर में सभी .cs फ़ाइलों की प्रतिलिपि बनाना चाहते हैं। मुझे बस फ़ोल्डर की जरूरत है। क्या केवल फ़ोल्डर को कॉपी करना संभव है, न कि सामग्री, और उसके बाद मुझे जिस सामग्री की आवश्यकता है उसकी प्रतिलिपि बनाना संभव है? या यदि मैं निर्देशिका कॉपी करता हूं तो क्या मैं फ़ाइलों को बाहर कर सकता हूं?

+0

प्रश्न में आम समस्या के लिए समाधान के लिए भी http://stackoverflow.com/questions/12780516/teamcity-artifacts-exclude-individual-files/ देखें। – Vadzim

उत्तर

3

आप एक MSBuild लक्ष्य है जो आप के लिए "तैनाती" पैकेज तैयार करता है जोड़ सकते हैं। मैं निम्नलिखित है (अपनी परियोजना के लिए कुछ परिवर्तन की आवश्यकता हो सकती):

<Target Name="Publish" DependsOnTargets="Build" Condition="'$(WebProjectOutputDir)'!=''"> 
    <RemoveDir Directories="$(WebProjectOutputDir)" ContinueOnError="true" /> 
    <!-- Log tasks --> 
    <Message Text="Publishing web application for $(MSBuildProjectName)" /> 
    <Message Text="WebProjectOutputDir: $(WebProjectOutputDir)" /> 
    <!-- Create the _PublishedWebsites\app\bin folder --> 
    <MakeDir Directories="$(WebProjectOutputDir)\bin" /> 
    <!-- Copy build outputs to _PublishedWebsites\app\bin folder --> 
    <Copy SourceFiles="@(IntermediateAssembly)" DestinationFolder="$(WebProjectOutputDir)\bin" SkipUnchangedFiles="true" /> 
    <Copy SourceFiles="@(AddModules)" DestinationFolder="$(WebProjectOutputDir)\bin" SkipUnchangedFiles="true" /> 
    <Copy SourceFiles="$(IntermediateOutputPath)$(_SGenDllName)" DestinationFolder="$(WebProjectOutputDir)\%(Content.SubFolder)%(Content.RecursiveDir)" SkipUnchangedFiles="true" Condition="'$(_SGenDllCreated)'=='true'" /> 
    <Copy SourceFiles="$(IntermediateOutputPath)$(TargetName).pdb" DestinationFolder="$(WebProjectOutputDir)\bin" SkipUnchangedFiles="true" Condition="'$(_DebugSymbolsProduced)'=='true'" /> 
    <Copy SourceFiles="@(DocFileItem)" DestinationFolder="$(WebProjectOutputDir)\bin" SkipUnchangedFiles="true" Condition="'$(_DocumentationFileProduced)'=='true'" /> 
    <Copy SourceFiles="@(IntermediateSatelliteAssembliesWithTargetPath)" DestinationFiles="@(IntermediateSatelliteAssembliesWithTargetPath->'$(WebProjectOutputDir)\bin\%(Culture)\$(TargetName).resources.dll')" SkipUnchangedFiles="true" /> 
    <Copy SourceFiles="@(ReferenceComWrappersToCopyLocal); @(ResolvedIsolatedComModules); @(_DeploymentLooseManifestFile); @(NativeReferenceFile)" DestinationFolder="$(WebProjectOutputDir)\bin" SkipUnchangedFiles="true" /> 
    <!-- copy any referenced assemblies to _PublishedWebsites\app\bin folder --> 
    <Copy SourceFiles="@(ReferenceCopyLocalPaths)" DestinationFiles="@(ReferenceCopyLocalPaths->'$(WebProjectOutputDir)\bin\%(DestinationSubDirectory)%(Filename)%(Extension)')" SkipUnchangedFiles="true" /> 
    <!-- Copy content files recursively to _PublishedWebsites\app\ folder --> 
    <Copy SourceFiles="@(Content)" DestinationFolder="$(WebProjectOutputDir)\%(Content.RelativeDir)" /> 
    <!-- Copy items that have been marked to be copied to the bin folder --> 
    <Copy SourceFiles="@(_SourceItemsToCopyToOutputDirectory)" DestinationFolder="$(WebProjectOutputDir)\bin" SkipUnchangedFiles="true" /> 
    <Copy SourceFiles="@(_SourceItemsToCopyToOutputDirectoryAlways)" DestinationFolder="$(WebProjectOutputDir)\bin" SkipUnchangedFiles="false" /> 
    </Target> 

तो, टीसी निर्माण में, मैं MSBuild बिल्डर इस तरह का उपयोग करें:

Targets: Rebuild;Publish 

Command line parameters: /p:WebProjectOutputDir="%system.teamcity.build.workingDir%\Website" 

फिर आप Website निर्देशिका का उपयोग कर सकते हैं आपके आर्टिफैक्ट के रूप में।

+0

ठीक है, जब मैं यह एमएसबिल्ड लक्ष्य जोड़ना चाहता हूं तो मैं थोड़ा सा खो गया हूं। मैं देख सकता हूं कि आप क्या कर रहे हैं और समझ में आता है। – MrW

+0

Preferanle मैं हालांकि टीसी ui से यह सब नियंत्रित करने के लिए, और MSBuild लक्ष्य के साथ सौदा करने की ज़रूरत नहीं सक्षम होने के लिए करना चाहते हैं। यह अजीब बात है कि यद्यपि केवल एक फ़ोल्डर की प्रतिलिपि बनाना संभव नहीं है। – MrW

+1

खैर, तर्कसंगत रूप से एक तैनाती पैकेज बनाना निर्माण प्रक्रिया का हिस्सा है। कलाकृतियों को उत्पन्न निर्माण आउटपुट से सिर्फ "एकत्रित" किया जाता है। इसलिए मेरा मानना ​​है कि आपकी बिल्ड फाइल में सबकुछ होने का रास्ता है; यह आपको तैनाती पैकेज का परीक्षण और संशोधित करने की अनुमति देता है, और यह आपके स्रोत कोड का हिस्सा है, ताकि भविष्य में एक समान निर्माण स्थापित करना आसान हो। बस एक पाठ संपादक (अपने एक MSBuild स्क्रिप्ट) में CSPROJ फ़ाइल को खोलने और फ़ाइल के बिल्कुल नीचे लक्ष्य जोड़ने, क्लोज़िंग रूट टैग से पहले। आपको बस इतना ही चाहिए। – Lucero

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