[TEAMBUILD2010] HowTo: Realizar análisis de código con StyleCop en Team Build 2010

image47dd1de4

Buenas,

después de comentar el lanzamiento de la primera versión de las Tfs Build Extensions para Team build 2010, pues hoy toca detallar el paso a paso para incorporar una de las actividades custom que se han liberado, a una definición de Team Build. En este caso, realizar un análisis de código con StyleCop luego de compilar un proyecto o solución.

Tutorial

1. Descargar e instalar StyleCop, desde su site de proyecto en CodePlex: http://stylecop.codeplex.com/. Además descargar y descomprimir la versión actual de Tfs Build Extensions desde su site de CodePlex: http://tfsbuildextensions.codeplex.com/

2. Para este ejemplo, utilizaremos un proyecto del tipo biblioteca de clases, con una única clase con el siguiente código:

   1: using System;

   2: namespace ElBruno.StyleCopBuild.Demo

   3: {

   4:     public class Valentino

   5:     {

   6:         public Valentino(int edad)

   7:         {

   8:             if(edad > 100)

   9:             {

  10:  

  11:                 throw  new ArgumentException("la edad no puede ser mayor que 100", "edad");

  12:             }

  13:         }

  14:     }

  15: }

Con estas pocas líneas de código ya podemos lanzar un par de warnings de StyleCop. Si realizamos un análisis del proyecto, nos encontraremos con lo siguiente:

image

3. Protegemos este código en nuestro servidor Team Foundation Server 2010 y creamos una definición de Team Build 2010 para compilar y validar este proyecto. Obviamente, el resultado esperado es el siguiente:

image

una Build con estado Sucess, donde se ha compilado y se han ejecutado las pruebas de forma correcta.

4. A continuación organizaremos un poco la estructura de directorios para de esta forma, poder tener los ensamblados requeridos para la definición personalizada de Team Build que se encargue de aplicar las reglas de análisis de código con StyleCop. Para esto, he creado dentro del SCC una estructura con varias carpetas:

  • build
    En este folder se almacenarán los ensamblados propios que se utilizan durante el proceso de build. Por ejemplo, las dlls que se distribuyen con Tfs Build Extensions. Además en esta carpeta copiaremos una template de Team Build (por ejemplo desde $/BuildProcessTemplates/DefaultTemplate.xaml) y sobre la misma realizaremos las modificaciones en el proceso de build.
  • src
    En este folder se almacena el código fuente de la solución

image

5. Modificaremos la definición del Build Controller, para que utilice el directorio que configuramos en el paso anterior como repositorio de custom assemblies para la ejecución de la Build.

image

Nota: si quieres ver un ejemplo completo sobre este tema, este post puede ayudar > http://elbruno.com/2011/03/22/teambuild2010-howto-crear-una-custom-activity-para-team-build-2010/

6. A continuación creamos un nuevo proyecto de tipo Class Library en Visual Studio 2010, en la ubicación del directorio con los ensamblados y templates de Builds. Este proyecto lo utilizaremos para poder editar la definición de build.

7. Eliminamos la clase (Class1.cs) del proyecto y agregamos una referencia al fichero xaml utilizando un Add As Link al proyecto. El proyecto se crea en su propia carpeta dentro del SCC, con lo que tendremos que subir un par de niveles hasta llegar al fichero BuildTemplateWithStyleCop.xaml.

image

8. Agregamos las referencias a todos los ensamblados que están en el folder Build, que son los que hemos descargado desde Tfs Build Extensions.

image

9. Editamos el archivo BuildTemplateWithStyleCop.xaml y en la ToolBox de herramientas, agregamos una nueva sección llamada [Tfs Build Extensions]. Dentro de la misma agregamos las actividades  de los ensamblados que hemos almacenado en el directorio build. La sección debería quedar similar a la siguiente:

image

10. Accedemos hasta la compilación de cada proyecto y luego de la actividad [Run MSBuild for Project] agregamos una nueva secuencia a la que llamaremos [Run StyleCop Analysis]. En la secuencia agregamos las siguientes variables, con el scope propio de la secuencia

  • StyleCopFiles – iEmumerable<string>
  • StyleCopSettingsFile – string
  • StyleCopResults – bool
  • StyleCopViolations – int32

11. Dentro de la secuencia agregamos 2 actividades del tipo [WriteBuildMessage] para indicar el inicio y el fin del proceso de análisis con StyleCop. Llamaremos a las mismas “Start StyleCop Analysis” y “Finish StyleCop Analysis”, y mostraremos un mensaje con el mismo nombre de cada actividad.

image

12. Luego del primer mensaje, agregamos una actividad del tipo [FindMatchingFile] para identificar los archivos .cs sobre los que se realizará el análisis. En la misma configuramos:

  • Display Name > Find CS files for source analysis
  • Result > StyleCopFiles
  • MatchPattern > String.Format(“{0}\**\*.cs”, BuildDirectory)

image

13. A continuación agregamos una actividad del tipo [Assign] para ubicar el archivo de settings de stylecop. En la misma configuramos:

  • Display Name > Assign StyleCop Settings File
  • To > StyleCopSettingsFile
  • Value > String.Format(“{0}\Settings.StyleCop”, localProject.Substring(0, localProject.LastIndexOf(“\”)))

image

14. A continuación agregamos una actividad del tipo [WriteBuildMessage]. En la misma configuramos:

  • Display Name > Start StyleCop Analysis using settings file
  • Importance > Microsoft.TeamFoundation.Build.Client.BuildMessageImportance.High
  • Message > String.Format(“About to run Stylecop with [{0}]”, StyleCopSettingsFile)

15. A continuación agregamos una actividad del tipo [StyleCop] que es la que realiza el análisis de código. En la misma configuramos:

  • Display Name > Run StyleCop Analysis
  • SettingsFile > StyleCopSettingsFile
  • SourceFiles > StyleCopFiles.ToArray()
  • Succeeded > StyleCopResults
  • TreatViolationsErrorASWarnings > True 
  • ViolationCount > StyleCopViolations

Un detalle importante es poner en True la propiedad [TreatViolationsErrorASWarnings] para que los errores que se encuentren en el proceso de análisis de código se muestren en el log como Warnings.

16. A continuación agregamos una actividad del tipo [WriteBuildMessage]. En la misma configuramos:

  • Display Name > Display StyleCop Analysis Results
  • Importance > Microsoft.TeamFoundation.Build.Client.BuildMessageImportance.High
  • Message > String.Format(“StyleCop Successed:{0} with {1} violations”, StyleCopResults, StyleCopViolations)

17. Protegemos el archivos modificado en TFS. El proceso debería quedar similar al siguiente:

image

18. Cambiamos la definición de la build para que utilice el proceso que hemos modificado en los pasos anteriores.

image

19. Lanzamos la build y ya podremos ver como en el resultado de la misma se incluye la ejecución del proceso de análisis de código con StyleCop.

image

 

A tener en cuenta

Si por el camino, cuando lanzas una nueva build te encuentras con el siguiente error:

Error: Could not load file or assembly ‘Microsoft.StyleCop, Version=4.4.0.14, Culture=neutral, PublicKeyToken=31bf3856ad364e35′ or one of its dependencies. The system cannot find the file specified.. Stack Trace:    at TfsBuildExtensions.Activities.CodeQuality.StyleCop.Scan()    at TfsBuildExtensions.Activities.BaseCodeActivity.Execute(CodeActivityContext context) in D:\Projects\teambuild2010contrib\MAIN\Source\Common\BaseCodeActivity.cs:line 66.
Could not load file or assembly ‘Microsoft.StyleCop, Version=4.4.0.14, Culture=neutral, PublicKeyToken=31bf3856ad364e35′ or one of its dependencies. The system cannot find the file specified.

image

Es muy probable que no tengas instalada la versión correcta de StyleCop. La versión que debes descargar e instalar es http://stylecop.codeplex.com/releases/view/44839

Otra opción es que no se puedan cargar los ensamblados de StyleCop para la ejecución de la build, en este caso deberías copiar los ensamblados desde el path de instalación de StyleCop [C:\Program Files (x86)\Microsoft StyleCop 4.4.0.14] y agregarlos en el directorio Build.

image

 

Puedes bajar el ejemplo completo desde:

https://skydrive.live.com/embedicon.aspx/Code%20Samples/2011%2007%2010%20ElBruno.StyleCop.TeamBuild.zip?cid=bef06dffdb192125&sc=documents

 

Saludos @ Home

El Bruno

   

Resources:

About these ads

6 pensamientos en “[TEAMBUILD2010] HowTo: Realizar análisis de código con StyleCop en Team Build 2010

  1. Pingback: [#TEAMBUILD2010] HowTo: Incorporar Code Metrics en la ejecución de una Build | El Bruno

  2. Pingback: [#TEAMBUILD2010] HowTo: Incorporar Code Metrics en la ejecución de una Build - El Bruno

  3. Pingback: Ejecutar Stylecop 4.5 en el workflow de Team Foundation Build | Eric Delahaye

  4. Pingback: [Spanish] Visual Studio 2010 ALM y Team Foundation Server 2010, 2008 y 2005 | El Bruno

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s