[TEAMBUILD2010] HowTo: Crear una Custom Activity para Team Build 2010

image47dd1de4

Buenas,

el siguiente tutorial muestra como crear una actividad personalizada para Team Build para Team Foundation Server 2010. En este caso concreto una actividad para mostrar información en el log de la ejecución de una build.

Tutorial

1. Creamos un nuevo proyecto del tipo Class Library. En este caso lo llamo [ElBruno.TeamBuild]

2. Agregamos las siguientes referencias:

  • System.Activities
  • Microsoft.TeamFoundation.Build.Workflow.dll
  • C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\ReferenceAssemblies\v2.0\Microsoft.TeamFoundation.Build.Client.dll
  • C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\ReferenceAssemblies\v2.0\Microsoft.TeamFoundation.Client.dll
  • C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\ReferenceAssemblies\v2.0\Microsoft.TeamFoundation.VersionControl.Client.dll

Aclaración: Si bien inicialmente no utilizaremos todas las referencias, dejo este post de ejemplo para futuras referencias.

3. A continuación vamos a agregar algo de código en el proyecto. Primero borramos la clase [Class1.cs], agregamos un directorio llamado [Activities] y agregamos un nuevo elemento del tipo [Code Activity] llamado [DisplayInformation]

image

 

4. En la clase definimos 2 parámetros para la actividad:

  • Message, el mensaje a mostrar en el Log.
  • MessageImportance, el nivel de importancia del mensaje.

En el override Execute() utilizamos la funcion TrackBuildMessage() para mostrar esta información:

   1: using System.Activities;

   2: using Microsoft.TeamFoundation.Build.Client;

   3: using Microsoft.TeamFoundation.Build.Workflow.Activities;

   4:  

   5: namespace ElBruno.TeamBuild.Activities

   6: {

   7:     [BuildActivity(HostEnvironmentOption.All)]

   8:     public sealed class DisplayInformation : CodeActivity

   9:     {

  10:         [RequiredArgument]

  11:         public InArgument<string> Message { get; set; }

  12:         [RequiredArgument]

  13:         public BuildMessageImportance MessageImportance { get; set; }

  14:  

  15:         protected override void Execute(CodeActivityContext context)

  16:         {

  17:             var textIn = context.GetValue(Message);

  18:             context.TrackBuildMessage(textIn, MessageImportance);

  19:         }

  20:     }

  21: }

5. Compilamos el proyecto y ya tenemos nuestra actividad para utilizar desde TFS2010.

6. Para tener acceso a esta actividad desde el editor de Visual Studio 2010, iremos por el camino fácil > copiaremos la dll compilada en el directorio de ensamblados de Visual Studio 2010:

[C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\]

Aclaración: Existe un método más elegante para probar esta actividad, eso lo explicaré en un futuro post.

7. Una vez copiado ya podemos utilizar esta actividad desde una definición de Build en Team Foundation Server 2010. Antes de modificar el template de ejecución de Builds, crearemos una copia del mismo y agregaremos el ensamblado a una ubicación específica del Source Control de TFS2010. En este caso en la ubicación

$//<TeamProjectName>/BuildDemo

8. Dentro de esta ubicación subimos los ensamblados compilados del proyecto

  • ElBruno.TeamBuild.dll
  • ElBruno.TeamBuild.pdb

9. Desde la ubicación de los templates de Team Foundation Server 2010, usualmente en [$/<TeamProjectName>/BuildProcessTemplates] copiamos el archivo [DefaultTemplate.xaml] al directorio [BuildDemo]. Una vez subidos todos los archivos, debería quedar similar a la siguiente imagen:

image

 

10. Creamos una definición de Build (que compile un proyecto cualquiera) y a continuación modificaremos la plantilla de build que utiliza esta definición. Para este ejemplo, he creado una build llamada [BlogCustomActivities].

image

 

11. En la sección [Process] editamos el Build Template con el que trabaja la build. Seleccionamos [New] y en el formulario de configuración seleccionamos el template que hemos copiado en el paso 7.

image

 

12. Lanzamos una build para ver que la misma funcione correctamente. No deberíamos tener ningún problema:

image

 

13. En este punto editaremos la plantilla de ejecución de la Build para utilizar la actividad que hemos creado en los primeros pasos. Editamos la plantilla que hemos copiado en el paso 7. Deberiamos ver el editor de WF como muestra la siguiente imagen:

image

 

14. Dentro de la Toolbox, agregamos una nueva sección llamada [Custom Build Activities] y agregamos nuestra actividad en la misma.

image

 

15. Agregamos una actividad de este tipo al inicio de la build, como tiene una propiedad pública requerida veremos que el editor marca un error de diseño:

image

 

16. Completamos la propiedad [Message], en este caso además cambio la importancia por el valor [High]

image

 

17. Protejemos la plantilla [DefaultTemplate.xaml]

18. A continuación debemos modificar el Build Controller que orquesta la ejecución de las builds. Para esto seleccionamos el nodo [Builds] desde el Team Explorer, desplegamos el menú contextual y seleccionamos la opción [Manage Build Controllers]

image

 

19. Desplegamos las propiedades del mismo, y configuramos la opción [Version control path to custom assemblies: ] indicando en el mismo el path donde hemos subido los ensamblados de la custom activity.

image

Aclaración: esta accíón reinicia el Build Controller, con lo que el mismo no estará disponible inmediatamente.

20. Lanzamos una nueva build de este tipo y ya podremos ver el mensaje personalizado en el log de ejecución de la misma.

image

 

Pues como introducción a actividades personalizadas, creo que me sirve. En próximos posts un par de escenarios más complejos Open-mouthed smile

 

Saludos @ Home

El Bruno

   

5 thoughts on “[TEAMBUILD2010] HowTo: Crear una Custom Activity para Team Build 2010

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.