¿Quién soy? · Desarrollador en CETA-Ciemat (Trujillo, Cáceres) · CETA = Centro Extremeño de Tecnologías Avanzadas · Empecé a trabajar con Symfony 1.1 · Ponente en deSymfony 2010 · Actualmente trabajo con Java y Symfony2 · Proyectos personales (www.suicidebystar.com)
Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily—leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Martin Fowler http://martinfowler.com/articles/continuousIntegration.html
Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily—leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Martin Fowler http://martinfowler.com/articles/continuousIntegration.html
Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily—leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Martin Fowler http://martinfowler.com/articles/continuousIntegration.html
Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily—leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Martin Fowler http://martinfowler.com/articles/continuousIntegration.html
Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily—leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Martin Fowler http://martinfowler.com/articles/continuousIntegration.html
Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily—leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Martin Fowler http://martinfowler.com/articles/continuousIntegration.html
Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily—leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Martin Fowler http://martinfowler.com/articles/continuousIntegration.html
· Los desarrolladores deben usar control de versiones. · Los desarrolladores tienen que adoptar la práctica. · Deben comprobar que todo está OK antes de hacer commit. · Los commits deben ser frecuentes.
· Comprueba si hay cambios en el mainline del CVS. · Si hay cambios, inicia el proceso de integración. · Comprueba que todo está OK. · El proceso de integración debe estar automatizado.
· El servidor de CI genera informes. · El desarrollador debe poder ver el resultado de la integración. · Dashboard donde consultar los resultados. · Sistema de alertas que avise en caso de fallo.
Proceso de integración 1. Compilación del código 2. Gestión de entornos 3. Ejecución de tests 4. Análisis estático del código 5. Despliegues 6. Generación de documentación 7. Feedback
Proceso de integración 1. Compilación del código 2. Gestión de entornos 3. Ejecución de tests 4. Análisis estático del código 5. Despliegues 6. Generación de documentación 7. Feedback Obligatorio. En lenguajes dinámicos comprobar sintaxis.
Proceso de integración 1. Compilación del código 2. Gestión de entornos 3. Ejecución de tests 4. Análisis estático del código 5. Despliegues 6. Generación de documentación 7. Feedback Preparación para los tests. No obligatorio. Gestión de bases de datos.
Proceso de integración 1. Compilación del código 2. Gestión de entornos 3. Ejecución de tests 4. Análisis estático del código 5. Despliegues 6. Generación de documentación 7. Feedback Tests unitarios, integración, aceptación, carga, etc.
Proceso de integración 1. Compilación del código 2. Gestión de entornos 3. Ejecución de tests 4. Análisis estático del código 5. Despliegues 6. Generación de documentación 7. Feedback Problemas de estilo, tamaño del código, etc.
Proceso de integración 1. Compilación del código 2. Gestión de entornos 3. Ejecución de tests 4. Análisis estático del código 5. Despliegues 6. Generación de documentación 7. Feedback Siempre la versión actual desplegada. Opcional.
Proceso de integración 1. Compilación del código 2. Gestión de entornos 3. Ejecución de tests 4. Análisis estático del código 5. Despliegues 6. Generación de documentación 7. Feedback La última documentación siempre disponible. Opcional.
Proceso de integración 1. Compilación del código 2. Gestión de entornos 3. Ejecución de tests 4. Análisis estático del código 5. Despliegues 6. Generación de documentación 7. Feedback Notificar los resultados, especialmente si hay errores.
Ventajas 1. Reduce riesgos 2. Reduce tareas repetitivas 3. Genera software listo para desplegar 4. Mejora la visibilidad del estado del proyecto 5. Aumenta la calidad del código 6. Genera confianza
Desventajas 1. Mantenimiento del entorno de CI 2. Coste adicional en software & hardware 3. Introduce muchos cambios 4. Difícil de adoptar en proyectos “legacy” 5. Los desarrolladores deben implicarse
Herramientas de build · Automatizan tareas repetitivas · Permiten automatizar el proceso de integración: · Compilación · Testing · Análisis del código · Despliegues · Generación de documentación
Apache Ant · Definición de tareas en XML · Programado y orientado para Java · Tareas habituales ya implementadas (javac, junit) · Multiplataforma · Ampliamente usado
PhpUnit · Framework de testing 1. Facilitar la escritura de tests 2. Ejecución automática 3. Facilidades para el análisis de los resultados · Estándar de facto · Pocas alternativas similares · El jUnit de PHP
Análisis estático del código · Analizan la calidad del código fuente · Generan informes procesables (XMLs) · No ejecutan software · No sustituyen a los tests · No evita el mal código... pero ayuda · Evitan la deuda técnica
Análisis estático del código · Clover · phpcpd · PHP_Depend · phploc · PHP Mess Detector · PHP_CodeSniffer · PHP_CodeBrowser Parte de PHPUnit. Análisis de cobertura de los tests.
Análisis estático del código · Clover · phpcpd · PHP_Depend · phploc · PHP Mess Detector · PHP_CodeSniffer · PHP_CodeBrowser Genera un informe HTML para PHPMD y PHP_CodeSniffer
Jenkins · Quizás el servidor de CI más popular · Software libre · Gratuito · Fácil de usar · Gran comunidad · Buena documentación · ¡Plugins! · Fork de Hudson
Hudson · El “padre” de Jenkins · Gestionado por Apache Foundation · Ritmo de desarrollo similar a Jenkins · El creador original ya no está en el proyecto · Mayor soporte a los plugins en Jenkins · En lineas generales: Hudson == Jenkins
PhpUnderControl · “Plugin” de CruiseControl · Configuración usando XMLs (¡No UI!) · El “rey” hasta la llegada de Hudson · Soporte en aplicaciones de terceros · Soporte a la mayoría de analizadores de código
Travis CI · Integración continua en la nube · Beta · Integrado con GitHub · ¡¡Gratis!! · Tiempo de configuración < 10 min · Soporte de lenguajes limitado (PHP sí) · Sólo funciona con repositorios públicos
Bonus tracks Continuous Integration: Improving Software Quality and Reducing Risk Paul Duvall, Steve Matyas y Andrew Glover Continuous Delivery: Reliable Software Releases Through Build, Test, and Deployment Automation David Farley y Jez Humble Jenkins: The Definitive Guide John Ferguson Smart Integrating PHP Projects with Jenkins Sebastian Bergmann http://jenkins-php.org/