2010-10-08 22 views
5

Estoy a punto de configurar Teamcity por primera vez por mi cuenta. Muy bueno y simple en la mayoría de las formas que tengo que decir. Sin embargo, tengo un problema que no he podido resolver ni encontrar información.Excluir tipos de archivos en artefactos teamcity

Cuando quiero publicar mis artefactos, deseo excluir algunos tipos de archivos.

ejemplo:

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

Sin embargo, yo no quiero copiar todos los archivos .cs en la carpeta. Solo necesito la carpeta. ¿Es posible copiar solo la carpeta y no el contenido, y luego copiar el contenido que necesito? ¿O puedo excluir archivos si copio un directorio?

+0

Vea también http://stackoverflow.com/questions/12780516/teamcity-artifacts-exclude-individual-files/ para soluciones para el problema común en cuestión. – Vadzim

Respuesta

3

Puede agregar un objetivo MSBUILD que prepare el paquete de "implementación" para usted. Tengo el siguiente (puede necesitar algunos cambios para su proyecto):

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

Por lo tanto, en la construcción TC, que uso el constructor MSBUILD así:

Targets: Rebuild;Publish 

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

continuación, puede utilizar el directorio Website como tu artefacto

+0

Bien, estoy un poco perdido cuando se trata de dónde debería agregar este MSBuild Target. Sin embargo, puedo ver lo que estás haciendo y tiene sentido. – MrW

+0

Preferanle Me gustaría poder controlarlo todo desde el TC ui, y no tener que lidiar con los Objetivos de MSbuild. Es extraño que no sea posible copiar solo una carpeta. – MrW

+1

Bueno, podría decirse que crear un paquete de implementación es parte del proceso de compilación. Los artefactos simplemente se "recopilan" de los resultados de compilación generados. Por lo tanto, creo que tener todo en su archivo de compilación es el camino a seguir; le permite probar y modificar el paquete de implementación, y es parte de su código fuente, por lo que es fácil hacer una configuración idéntica en el futuro. Simplemente abra su archivo CSPROJ en un editor de texto (es un script MSBUILD) y agregue el destino en la parte inferior del archivo, justo antes de la etiqueta raíz de cierre. Eso deberia ser todo lo que necesitas. – Lucero

Cuestiones relacionadas