2010-10-08 15 views
5

Sto per installare teamcity per la prima volta da solo. Molto bello e semplice sotto molti aspetti, devo dire. Tuttavia, ho un problema che non riesco a risolvere e trovare informazioni su.Escludi tipi di file negli artefatti teamcity

Quando voglio pubblicare i miei artefatti, voglio escludere alcuni tipi di file.

esempio:

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

Comunque, io non voglio copiare tutti i file nella cartella Cs. Ho solo bisogno della cartella. È possibile copiare solo la cartella e non il contenuto, quindi copiare tutto il contenuto di cui ho bisogno? O posso escludere i file se copio una directory?

+0

Vedere anche http://stackoverflow.com/questions/12780516/teamcity-artifacts-exclude-individual-files/ per le soluzioni per il problema comune in questione. – Vadzim

risposta

3

È possibile aggiungere un target MSBUILD che prepara il pacchetto "deployment". Ho il seguente (potrebbe essere necessario qualche cambiamento per il vostro progetto):

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

Così, nella build TC, che uso il costruttore MSBUILD in questo modo:

Targets: Rebuild;Publish 

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

è quindi possibile utilizzare la directory Website come il tuo artefatto.

+0

Ok, sono un po 'perso quando dovrei aggiungere questo target MSBuild. Posso vedere cosa stai facendo però e ha senso. – MrW

+0

Preferanle Mi piacerebbe essere in grado di controllare tutto da TC ui e non avere a che fare con MSbuild Targets. È strano che non sia possibile copiare solo una cartella. – MrW

+1

Beh, probabilmente la creazione di un pacchetto di distribuzione è parte del processo di compilazione. Gli artefatti vengono semplicemente "raccolti" dagli output di generazione generati. Quindi credo che avere tutto nel tuo file di build sia la strada da percorrere; ti permette di testare e modificare il pacchetto di distribuzione, ed è parte del tuo codice sorgente, in modo che l'impostazione di una build identica in futuro sia facile da fare. Basta aprire il file CSPROJ in un editor di testo (è uno script MSBUILD) e aggiungere il target nella parte inferiore del file, appena prima del tag di chiusura. Questo dovrebbe essere tutto ciò di cui hai bisogno. – Lucero

Problemi correlati