12/9/2009 14:06 El Bruno

[TFS2008] HowTo: Copiar el resultado completo de un build (assemblies, test results, etc) a una carpeta determinada

 

 

Buenas,

hace un par de días en los foros de Team System Julio planteaba un escenario donde era necesario copiar el resultado de una compilación a una ubicación determinada. Una de las soluciones consiste en modificar la definición de la Build en TFS, para que después de compilar y ejecutar las pruebas se copien las mismas.

El siguiente paso a paso demuestra como copiar solo el resultado de las pruebas, la carpeta [TestResults] al directorio [C:\FTP].

Tutorial

1. Para copiar el directorio completo utilizaremos una bibilioteca de tareas para TFS Build: SDC Tasks, ya que la tarea Copy que posee MSBuild no es lo suficientemente potente para este escenario.

2. SDC Tasks se puede descargar desde http://sdctasks.codeplex.com/ y luego debemos copiar el contenido de la release al directorio de MSBuild [C:\Program Files\MSBuild].

image

3. Editamos una definición de build, en este caso llamado [Hola Mundo Build]. Nota: Podemos utilizar este post como ejemplo para editar un build.

4. En la cabecera importamos el archivo que nos permite utilizar las SDC desde la definición del Build, en este caso la línea 5.

   1: <Project DefaultTargets="DesktopBuild" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
   2:   <!-- Do not edit this -->
   3:   <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TeamBuild\Microsoft.TeamFoundation.Build.targets" />
   4:   <Import Project="$(MSBuildBinPath)\Microsoft.Common.targets" />
   5:   <Import Project="$(MSBuildExtensionsPath)\Microsoft.Sdc.Common.tasks" />
   6:   ...
   7: </Project>

5. Agregamos un nuevo Target, en este caso el que se ejecuta después de copiar los archivos de la compilación; y dentro del mismo utilizamos la tarea Fodler.Copy (línea 13) para copiar el resultado de los tests de una build al directorio FTP, utilizando además el número de la build para identificar los resultados.

   1: <Target Name="AfterDropBuild">
   2:  
   3:   <BuildStep TeamFoundationServerUrl="$(TeamFoundationServerUrl)" 
   4:              BuildUri="$(BuildUri)" Name="CopyFilesToFtp" 
   5:              Message="Start copy files to FTP Location from $(DropLocation)\$(BuildNumber)\TestResults">
   6:     <Output TaskParameter="Id" PropertyName="CopyFilesToFtpId" />
   7:   </BuildStep>
   8:  
   9:   <CreateItem Include="$(DropLocation)\$(BuildNumber)\TestResults" >
  10:     <Output ItemName="FolderToCopy" TaskParameter="Include" />
  11:   </CreateItem>
  12:  
  13:   <Folder.CopyFolder Source="@(FolderToCopy)" Destination="C:\FTP\$(BuildNumber)" />
  14:  
  15:   <BuildStep TeamFoundationServerUrl="$(TeamFoundationServerUrl)" 
  16:              BuildUri="$(BuildUri)" Name="EndCopyFiles" Id="$(CopyFilesToFtpId)" 
  17:              Message="End copy files to FTP location from $(DropLocation)\$(BuildNumber)\TestResults" 
  18:              Status="Succeeded" />
  19:  
  20: </Target>

6. Para mostrar los pasos de ejecución del build, utilizamos BuildSteps (ver líneas 3 y 15; para referencia ver este post). De esta forma, cuando se ejecuta un build, podemos ver lo siguiente.

image

7. De esta forma, cada vez que se ejecute un build y se generen resultados de tests, los mismos se copiarán a la carpeta C:\FTP.

image

 

Saludos @ Madrid (Finally !!!)

El Bruno

Archivado en: ,,,,
Comparte este post:

# re: [TFS2008] HowTo: Copiar el resultado completo de un build (assemblies, test results, etc) a una carpeta determinada

Saturday, September 12, 2009 3:11 PM by Paulo

También es posible usar de forma mas directa la herramienta robocopy, viene por defecto en W2008 Server (creo que tb en 2003).

Robocopy mucho  mas robusta en la copia, por ejemplo cuando es una unidad de red que pueda estar no siempre compartida, y se quiere reintentar 4 veces la copia, esperando 2 segundos, excluyendo las subcarpetas que se llamen bin se puede usar el siguiente comando

 <Target Name="PackageBinaries">

   <Exec Command="Robocopy.exe $(BinariesRoot)\Release\_PublishedWebsites\carpetaOrigen \\Servidor2\CarpetaDestino /MIR /R:4 /W:2 /TBD /XD bin" IgnoreExitCode="true" />

 </Target>

Se puede usar en evento PackageBinaries, o AfterDropBuild segun las necesidades.

# re: [TFS2008] HowTo: Copiar el resultado completo de un build (assemblies, test results, etc) a una carpeta determinada

Saturday, September 12, 2009 10:28 PM by El Bruno

Paulo gracias por el Tip y efectivamente: Robocopy Rules !!!

Saludos

# [TFS2008] Posts y HowTos sobre Team Foundation Server 2008 y 2005 (VI)

Wednesday, September 23, 2009 7:54 PM by El Bruno

Buenas, actualización con los posts, HowTos, posts sobre informes, builds, etc. sobre Team Foundation

# [Spanish] Visual Studio 2010 ALM y Team Foundation Server 2010, 2008 y 2005

Sunday, August 28, 2011 1:04 PM by El Bruno

13 marzo Buenas, Team Foundation Server 2010 WorkItem Tracking [#TFS2010] HowTo: Agregar un estado en