Continuous Integration

49
Nuestros primeros pasos con Hudson 2011 Ing. José Díaz Díaz [email protected] @joedayz Skype: joedayz www.joedayz.pe

description

Introducción y aplicación de Integración Continua con Hudson.

Transcript of Continuous Integration

Page 1: Continuous Integration

Nuestros primeros pasos con Hudson

2011

Ing. José Díaz Díaz

[email protected]@joedayzSkype: joedayzwww.joedayz.pe

Page 2: Continuous Integration

Preparando tu Entorno

Page 3: Continuous Integration

Preparando tu entorno

• Necesitamos Java 6+. ¿Cómo instalarlo?• Tener un Servidor SVN propio o externo

– Google Code Hosting. ¿Cómo usarlo?– SourceRepo.com ¿Cómo usarlo?– Slik Subversion ¿Cómo usarlo?

• Hudson – Descargar de http://hudson-ci.org/ – Vídeo de instalación– Ejecutar standalone: java –jar hudson-2.0.1.war

Page 4: Continuous Integration

El entorno de integración continua

Page 5: Continuous Integration

El entorno de Integración Continua

• El desarrollo de proyectos agiles necesita prevenir problemas y regresiones en el menor tiempo posible.

• Algunas practicas se deberían establecer para conseguir este objetivo:– Desarrollar test unitarios– Realizar commits frecuentes del código fuente– Deployar la aplicación en un entorno integrado– Ejecutar los test

• Estas buenas practicas necesitan un gran compromiso de parte de los desarrolladores para lograr los resultados esperados.

Page 6: Continuous Integration

El entorno de Integración Continua

• Es casi inviable ejecutar los unit test en la maquina de cada desarrollador porque esto minimizará sus recursos (memoria, IDE, tiempo)

• Es un desperdicio tener un recurso asignado para deployar la aplicación y que este verificando que no hay regresión por la ejecución de los tests.

Page 7: Continuous Integration

El entorno de IntegraciónContinua

• La respuesta a nuestros problemas es un entorno de integración continua para asegurarnos que las pruebas unitarias se han realizado a lo largo de todo el proceso de desarrollo de la aplicación.

• Existen muchos entornos de integración continua. Los más conocidos son Hudson, Continuum, Cruise Control, Team City.

Page 8: Continuous Integration
Page 9: Continuous Integration

El entorno de IntegraciónContinua

• Existen muchas arquitecturas de integración continua. En la figura siguiente , por ejemplo, tenemos Hudson, SVN, Maven y GlassFish.

• No es la única y no hay una mejor que otra. Si te permite cumplir los objetivos planteados inicialmente SIRVE.

Page 10: Continuous Integration
Page 11: Continuous Integration

Ejecutando Hudson java –jar hudson-2.0.1.war

Page 12: Continuous Integration
Page 13: Continuous Integration
Page 14: Continuous Integration
Page 15: Continuous Integration

Configurando Hudson

• Hudson– Configuramos Maven– Configuramos JDK – Ver video de instalación

• Creando nuestro primer Job– Usaremos la aplicación

http://code.google.com/p/joedayz-poo/source/checkout

Page 16: Continuous Integration

Configurando JDK y Maven

Page 17: Continuous Integration

Crear un proyecto de estilo libre.

Primer Job

Page 18: Continuous Integration

Es un cron syntax: minuto(0-59), hora (0-23), día del mes (1-31), mes(1-12) y día de la semana (0-

7, Con 0 y 7 es Domingo)

Configurando SVN

Page 19: Continuous Integration

Tareas Maven

Page 20: Continuous Integration

Job Creado

Page 21: Continuous Integration

Aplicación de Ejemplo

Page 22: Continuous Integration

Obteniendo el Código de Ejemplo

• Usando el SpringSource Tool Suite con su plugin subclipse.

• Descargamos el código fuente de https://joedayz-poo.googlecode.com/svn/trunk/

• El proyecto esta mavenizado. Ver el POM.xml para ver los plugins que necesitas instalar para trabajar con Hudson sin problemas.

Page 23: Continuous Integration
Page 24: Continuous Integration
Page 25: Continuous Integration

Test

• Luego de bajar el proyecto, lo que haremos es modificar una clase que haga que nuestros tests fallen.

Nota: Como estamos usando maven y el plugin surefire. Tus tests deben terminar así: * **/*Test.java * **/Test*.java * **/*TestCase.java

Sino te dirá que no hay test.

Page 26: Continuous Integration

T_USUARIO es el nombre real.

Page 27: Continuous Integration

Hudson reacciona

Page 28: Continuous Integration

Error al detalle

Page 29: Continuous Integration
Page 30: Continuous Integration

Mas reportes - Javadocs

• Los comentarios javadoc son un recurso importante de documentación técnica.

• UmlGraph es una herramienta que te permite producir Javadoc con diagramas UML.

• Hudson puede integrar Javadoc directamente a la app web. De esta forma todos pueden acceder al último Javadoc facilmente.

• Tenemos que modificar en Hudson

Page 31: Continuous Integration
Page 32: Continuous Integration

Javadoc:javadoc

• Luego de configurarlo aparecerá el link en la web

Page 33: Continuous Integration
Page 34: Continuous Integration

Añadiendo coverage y otras métricas

• Con hudson es posible publicar muchos reportes útiles aparte del javadoc

• Vamos a usar Cobertura para añadir coverage metrics.

• Code coverage nos dará los indicadores de cuanto de nuestro código es ejecutando durante nuestros tests – útil para encontrar áreas donde el código no ha sido testeado.

• Lo mejor para ver si nuestro team esta aplicando buenas practicas como TDD o BDD.

Page 35: Continuous Integration

Añadiendo coverage y otras métricas

• Cobertura (http://cobertura.sourceforge.net/)• Nuestro proyecto ya ha sido configurado para

trabajar con Cobertura

Pom.xml

Page 36: Continuous Integration

Instalando plugin para Cobertura

• En hudson necesitamos instalar el plugin para cobertura

• Ingresamos a http://localhost:8080/pluginManager/

Page 37: Continuous Integration

Plugin Cobertura

Page 38: Continuous Integration
Page 39: Continuous Integration

Usar Cobertura

• Para configurar coverage metrics de código en nuestro proyecto necesitamos hacer dos cosas: – Primero crear un Cobertura Coverage data en

formato XML que Hudson usará.– Luego configurar Hudson para que muestre los

reportes de coverage

Page 40: Continuous Integration

Tarea Maven

Page 41: Continuous Integration

Informes de Cobertura

• En la sección de “Coverage Metrics Target” vamos a definir los niveles mínimos aceptables de code coverage.

• En la figura que viene estipulamos que menos de 50% de test coverage es “inestable” (indicado por un circulo amarillo) y notificar al team al respecto.

Page 42: Continuous Integration
Page 43: Continuous Integration

Informes de Cobertura

• Ahora dispararemos un build manual y ver los resultados

Page 44: Continuous Integration

Aparece Link de Cobertura.

Page 45: Continuous Integration
Page 46: Continuous Integration
Page 47: Continuous Integration

Referencias• Propias

– Joedayz.org– Joedayz.pe– http://www.facebook.com/JoeDayzUniversity

• Otras– Continuous Integration: Improving Software Quality and Reducing

Risk– Continuous Delivery: Reliable Software Releases through Build, Test,

and Deployment Automation (Addison-Wesley Signature Series (Fowler))

– Agile Testing• http://www.agile-peru.net/• http://agile-spain.com/

Page 48: Continuous Integration

Gracias Bruce!!

Page 49: Continuous Integration

Contacto

Av. Guillermo Prescott 385, San IsidroLima – Perú

(511) 987500273www.joedayz.pe