Search code examples
teamcityteamcity-5.1

Exclude file types in teamcity artifacts


I'm just about to setup teamcity for the first time on my own. Very nice and simple in most ways I have to say. However, I have one issue that I haven't manage to solve and find any information about.

When I wanna publish my artifacts I want to exclude some file types.

example:

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

However, I don't want to copy all the .cs files in the folder. I just need the folder. Is it possible to copy just the folder and not the content, and then copy what ever content I need? Or can I exclude files if I copy a directory?


Solution

  • You can add a MSBUILD target which prepares the "deployment" package for you. I have the following (may need some changes for your project):

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

    So, in the TC build, I use the MSBUILD builder like this:

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

    You can then use the Website directory as your artifact.