¡Chewbacca, toda la potencia y velocidad al TFS Build! que diría Han Solo…

Una de las carácteriscas más desconocidas de TfsBuild (y de MsBuild) introducida en la versión 2008 es la posibilidad de compilar varios proyectos en paralelo. Esta carácterística puede acelerar nuestras builds de manera significativa. Sobre todo teniendo en cuenta que el número de procesadores disponibles en las máquinas es cada vez mayor. Para activar esta caracteristica es necesario seguir los siguientes pasos.

1) Debemos modificar Microsoft.TeamFoundation.Build.targets para que se construyan en paralelo diferentes configuraciones (p.e. las típicas de Release y Debug):

 

  <MSBuild BuildInParallel=«true«

        Projects=«@(ConfigurationList)«

        Targets=«CompileConfiguration«

        StopOnFirstFailure=«$(StopOnFirstFailure)«>

    <Output TaskParameter=«TargetOutputs« ItemName=«CompilationOutputs« />

  </MSBuild>

 

2) Debemos modificar Microsoft.TeamFoundation.Build.targets para que se construyan en paralelo diferentes soluciones:

 

  <MSBuild BuildInParallel=«true«

          Projects=«@(SolutionList)«

          Targets=«CompileSolution«

          StopOnFirstFailure=«$(StopOnFirstFailure)«>

    <Output TaskParameter=«TargetOutputs« ItemName=«CompilationOutputs« />

  </MSBuild>

3) Modificar   TfsBuildService.exe.config (generalmente ubicado en %ProgramFiles%Microsoft Visual Studio 9.0Common7IDEPrivateAssemblies) y añadir una entrada MaxProcesses que especifica el número de proceso de MsBuild que se levantarán en paralelo:

  <!– MaxProcesses

  Set this value to the maximum number of processes MSBuild.exe should

  use for builds started by agents hosted by this executable.

  –>

  <add key=«MaxProcesses« value=«1« />

Después de estos cambios, es necesario reiniciar el servicio de TFS Build (net stop vstfbuild y net start vstfbuild). A partir de este momento la builds se ejecutarán en paralelo.

Para que esa parelelización funcione debemos usar referencias a proyecto. Usando referencias de proyecto, MsBuild puede, analizando esta información de dependencias, saber en que orden construir los proyectos y si es posible paralelizar la construcción de un determinado proyecto. Si estamos referenciando binarios, MsBuild no podrá deducir esa información, con lo que si paralelizamos la construcción podríamos sufrir errores de compilación.

5 comentarios sobre “¡Chewbacca, toda la potencia y velocidad al TFS Build! que diría Han Solo…”

  1. Muy buena la optimización. Pero… es posible que, en una misma build, primero compilar ciertas soluciones por orden, y luego el resto de soluciones en paralelo ?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *