Este artículo tiene como objetivo resumir la experiencia adquirida al agregar soporte .NET a Atlassian Bamboo y luego la configuración necesaria para compilar un proyecto .NET, ejecutar unit tests, ejecutar un análisis de code coverage y realizar deployment automáticos de una aplicación Web.

bamboo-icon

INTEGRACIÓN CONTINUA

La integración continua es una metodología de desarrollo de software donde se ejecuta un build, unit tests y muchas veces integration tests cada vez que código es comiteado al repositorio. Asegurando que cada cambio se integra correctamente al código base existente. Una de las principales ventajas es proveer un ‘fail fast’ feedback de la calidad de los cambios introducidos.

Bamboo es un server de integración continua provisto por Atlassian. Como otras herramientas similares provee: testeo y build automático del código, feedback acerca de build exitosos y fallidos, herramientas de reporte para realizar diferentes análisis estáticos, etc. Ofrece otras características interesantes como los deployments projects y a su vez al ser desarrollado por los creadores de JIRA ofrece una buena integración entre herramientas.

No es la intención de este artículo realizar un análisis detallado de las características de Bamboo. En el final de este artículo podrán encontrar  links de referencia a información más detallada.

SUMANDO SOPORTE .NET

La siguiente es una lista rápida de las herramientas instaladas en cada agent de Bamboo para agregar soporte .NET:

Desde un equipo con Visual Studio instalado copiar la siguiente carpeta al mismo path en el agent:

C:Program Files (x86)MSBuildMicrosoftVisualStudiov12.0

 

CONFIGURACIÓN BAMBOO

EJECUTABLES

Fuera de las capacidades automáticamente detectadas por Bamboo solo fue necesario configurar MSTest como un nuevo ejecutable de tipo Visual Studio apuntando a: C:Program Files (x86)Microsoft Visual Studio 12.0Common7IDE

COBERTURA DE CÓDIGO

La opción utilizada para calcular Code Coverage es OpenCover (https://github.com/OpenCover).  Un ejemplo de uso es:

msbuild.exe open.cover.proj /p:WorkingDirectory=%CD% /p:OpenCoverBinPath=[OpenCoverConsoleExePath] /p:MSTestBinPath=[MSTestExePath]

Donde:

open.cover.proj

Es un proyecto msbuild custom creado para llamar a OpenCover.Console.exe sin necesidad de explícitamente escribir los paths a cada test assembly. Mientras éstas terminen con el sufijo *.Test.dll o *.Tests.dll serán reconocidas y configuradas automáticamente.

El output de este proceso es un archivo opencover.xml con el resultado del análisis.

Este archivo xml puede utilizarse como entrada para presentar los resultados de Code Coverage en Sonar (http://www.sonarqube.org/) pero está fuera del scope de este artículo presentar ese escenario.

ReportGenerator (http://www.palmmedia.de/OpenSource/ReportGenerator)

Es la herramienta elegida para parsear el xml output de open cover y convertirlo en un reporte Html

 

Ejemplo de uso:

[ReportGeneratorExePath] -reports:[OpenCoverXMLFile] -targetdir:[OutputFolder] -reporttypes:Html

 

De esta manera en [OutputFolder] tendremos una serie de archivos html. Apuntando cualquier web server a esa carpeta y tomando como punto de entrada index.html tendremos acceso a un completo reporte con los resultados del análisis.

 

WEB DEPLOYMENT

Para realizar los web deployments la herramienta elegida fue WebDeploy. La opción recomendada por Microsoft para esta tarea.

Existen un par de opciones al momento de deployar una aplicación Web con Web Deploy; la elegida en nuestro caso fue a través de la generación de un paquete de instalación. Una forma de generarlo y deployarlo utilizando MSBuild es:

msbuild [SolutionPath] /p:Configuration=[Configuration] /p:DeployOnBuild=True /p:DeployTarget=MsDeployPublish /p:CreatePackageOnPublish=True /p:MSDeployPublishMethod=WMSVC /p:MSDeployServiceURL=[ServerIP] /p:DeployIISAppPath=[IISWebSiteName] /p:UserName=[UserName] /p:Password=[Password] /p:AllowUntrustedCertificate=True

 

Donde:

[SolutionPath] : Es el path al archivo sln de la solución.

[Configuration] : Es la configuración para compilar la solución usando msbuild: Release por ejemplo.

[ServerIP] : La ip del server destino donde se deployara la aplicacion

[IISWebSiteName] : El nombre del Web Site en IIS

Web Deploy debe estar instalado y configurado en el server donde se deploya la aplicación. En las referencias se incluyen links acerca de cómo hacerlo.

 

PLAN DE CONFIGURACIÓN

ETAPAS & TAREAS

Finalmente se puede configurar el plan siguiendo las prácticas recomendadas por Atlassian. Usando Stages para identificar rápidamente errores como una herramienta ‘Fail Fast’

Así se pueden configurar tres simples Stages:

Build: Ejecuta el checkout y compila la solución.

Unit Tests: Ejecuta un análisis de unit tests y luego de code coverage utilizando OpenCover

Deployment: Deploya automáticamente la aplicacion Web utilizando WebDeploy.

 

CONCLUSIÓN

Como se puede ver en el artículo, se trata de una opción poor man Code Coverage and Web deployment en .NET. Sin necesidad de ningún software licenciado e incluso hasta sin la necesidad de Bamboo. Con poco esfuerzo pueden configurarse archivos bat y ejecutar todo este proceso localmente.

La combinación OpenCover para medir code coverage + WebDeploy para realizar deployments automáticos de una aplicación Web es más que efectiva para agregar esta funcionalidad a nuestros proyectos.

En este post no se hace referencia o aprovecha ninguna característica específica de Bamboo como pueden ser los deployment projects los cuales serán cubiertos en un futuro blog post.

Lecturas complementarias

http://www.martinfowler.com/articles/continuousIntegration.html

https://confluence.atlassian.com/display/BAMBOO/Getting+started+with+Bamboo

https://confluence.atlassian.com/display/BAMBOO/Getting+started+with+.NET+and+Bamboo

https://github.com/OpenCover/opencover/wiki/Usage

http://www.iis.net/learn/install/installing-publishing-technologies/installing-and-configuring-web-deploy

http://msdn.microsoft.com/en-us/library/ff356104(VS.100).aspx

 

 

Facebooktwittergoogle_plusredditlinkedinby feather

Leave a Reply

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

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>