Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Integración Continua y Symfony2

Integración Continua y Symfony2

Presentación sobre integración continua y Symfony2 para deSymfony 2012

César Suárez Ortega

June 16, 2012
Tweet

More Decks by César Suárez Ortega

Other Decks in Programming

Transcript

  1. ¿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)
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. · 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.
  10. · 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.
  11. · 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.
  12. 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
  13. 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.
  14. 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.
  15. 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.
  16. 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.
  17. 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.
  18. 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.
  19. 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.
  20. 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
  21. 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
  22. 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
  23. Apache Ant · Definición de tareas en XML · Programado

    y orientado para Java · Tareas habituales ya implementadas (javac, junit) · Multiplataforma · Ampliamente usado
  24. 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
  25. 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
  26. Análisis estático del código · Clover · phpcpd · PHP_Depend

    · phploc · PHP Mess Detector · PHP_CodeSniffer · PHP_CodeBrowser
  27. 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.
  28. Análisis estático del código · Clover · phpcpd · PHP_Depend

    · phploc · PHP Mess Detector · PHP_CodeSniffer · PHP_CodeBrowser Detector de “copy & pastes”.
  29. Análisis estático del código · Clover · phpcpd · PHP_Depend

    · phploc · PHP Mess Detector · PHP_CodeSniffer · PHP_CodeBrowser Mide la extensibilidad, reusabilidad y mantenibilidad del código.
  30. Análisis estático del código · Clover · phpcpd · PHP_Depend

    · phploc · PHP Mess Detector · PHP_CodeSniffer · PHP_CodeBrowser Mide el tamaño del código.
  31. Análisis estático del código · Clover · phpcpd · PHP_Depend

    · phploc · PHP Mess Detector · PHP_CodeSniffer · PHP_CodeBrowser Busca bugs potenciales, problemas de optimización, ...
  32. Análisis estático del código · Clover · phpcpd · PHP_Depend

    · phploc · PHP Mess Detector · PHP_CodeSniffer · PHP_CodeBrowser Busca errores de estilo en el código.
  33. 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
  34. 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
  35. 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
  36. 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
  37. 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
  38. Sismo · ¡El servidor CI de Fabien! · Soporte limitado

    a Git · Sólo ejecuta tests · Fácil de instalar (¡1 fichero PHP!) · No le pidas peras al olmo
  39. 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/