2010-10-08 11 views
5

Ich bin gerade dabei, teamcity zum ersten Mal selbst zu gründen. Sehr schön und einfach in vielerlei Hinsicht muss ich sagen. Allerdings habe ich ein Problem, das ich nicht lösen kann und über das ich Informationen finde.Ausschließen von Dateitypen in Teamcity-Artefakten

Wenn ich meine Artefakte veröffentlichen möchte, möchte ich einige Dateitypen ausschließen.

Beispiel:

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

aber ich will nicht alle CS-Dateien in den Ordner kopieren. Ich brauche nur den Ordner. Ist es möglich, nur den Ordner und nicht den Inhalt zu kopieren und dann den Inhalt zu kopieren, den ich brauche? Oder kann ich Dateien ausschließen, wenn ich ein Verzeichnis kopiere?

+0

Siehe auch http://stackoverflow.com/questions/12780516/teamcity-artifacts-exclude-individual-files/ für Lösungen für häufig auftretende Probleme. – Vadzim

Antwort

3

Sie können ein MSBUILD-Ziel hinzufügen, das das Paket "deployment" für Sie vorbereitet. Ich habe nach dem (möglicherweise einige Änderungen für Ihr Projekt benötigen):

<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> 

Also, in der TC zu bauen, ich benutze den MSBUILD Baumeister wie folgt aus:

Targets: Rebuild;Publish 

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

Sie können dann mit dem Website Verzeichnis als dein Artefakt.

+0

Okay, ich bin ein bisschen verloren, wenn es darum geht, wo ich dieses MSBuild Target hinzufügen soll. Ich kann jedoch sehen, was Sie tun und macht Sinn. – MrW

+0

Preferanle Ich möchte aber alles vom TC ui aus kontrollieren können und nicht mit MSbuild Targets zu tun haben. Es ist merkwürdig, dass es nicht möglich ist, nur einen Ordner zu kopieren. – MrW

+1

Nun, das Erstellen eines Bereitstellungspakets ist wohl Teil des Build-Prozesses. Die Artefakte werden einfach von den erzeugten Build-Ausgaben "gesammelt". Daher glaube ich, dass alles in Ihrer Build-Datei ist der Weg zu gehen; Damit können Sie das Bereitstellungspaket testen und ändern, und es ist Teil Ihres Quellcodes, sodass die Einrichtung eines identischen Builds in der Zukunft einfach ist. Öffnen Sie einfach Ihre CSPROJ-Datei in einem Texteditor (ein MSBUILD-Skript) und fügen Sie das Ziel ganz am Ende der Datei direkt vor dem schließenden Stamm-Tag hinzu. Das sollte alles sein, was du brauchst. – Lucero

Verwandte Themen