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

267ee9b8bfeb0c72b5dbe643bbc4433b?s=128

César Suárez Ortega

June 16, 2012
Tweet

Transcript

  1. None
  2. None
  3. & Symfony2 Integración Continua César Suárez Ortega deSymfony 2012

  4. ¿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)
  5. Problemática

  6. None
  7. None
  8. None
  9. None
  10. ¿Qué es la Integración Continua?

  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. 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
  17. 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
  18. Ingredientes para una rica Integración Continua

  19. None
  20. None
  21. · 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.
  22. · 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.
  23. · 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.
  24. ¿Qué se ejecuta en cada integración?

  25. 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
  26. 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.
  27. 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.
  28. 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.
  29. 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.
  30. 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.
  31. 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.
  32. 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.
  33. Las reglas del …

  34. None
  35. 1 Haz commit frecuentemente

  36. 2 No hagas commit de código erróneo

  37. 3 Arregla los build rotos inmediatamente

  38. 4 ¡¡Automatiza!!

  39. 5 Todos los tests e inspecciones deben pasar

  40. 6 Ejecuta los builds antes de hacer commit

  41. 7 Optimiza los builds

  42. Ventajas & Desventajas

  43. 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
  44. 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
  45. Caja de herramientas

  46. Herramientas build análisis test servidores CI

  47. Herramientas build análisis test servidores CI

  48. None
  49. 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
  50. Apache Ant · Definición de tareas en XML · Programado

    y orientado para Java · Tareas habituales ya implementadas (javac, junit) · Multiplataforma · Ampliamente usado
  51. Phing · Alternativa PHP a Ant · Integración con el

    ecosistema de desarrollo PHP
  52. cualquier cosa Aunque se puede usar

  53. Herramientas build análisis test servidores CI

  54. 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
  55. None
  56. Herramientas build análisis test servidores CI

  57. 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
  58. Análisis estático del código · Clover · phpcpd · PHP_Depend

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

    · phploc · PHP Mess Detector · PHP_CodeSniffer · PHP_CodeBrowser Detector de “copy & pastes”.
  61. 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.
  62. 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.
  63. 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, ...
  64. 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.
  65. 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
  66. Herramientas build análisis test servidores CI

  67. None
  68. 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
  69. None
  70. None
  71. 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
  72. 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
  73. None
  74. 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
  75. None
  76. 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
  77. None
  78. Y mucho más...

  79. = Servidor CI Integración Continua /

  80. ¿Y qué pasa con Symfony2?

  81. Nada

  82. = CI con PHP CI con Symfony2

  83. Sólo analiza tus bundles

  84. Ejemplo https://github.com/csuarez/symfony2-ci-example

  85. 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/
  86. suarez.ortega.cesar@gmail.com @tharandur ¿Preguntas? ¡¡Gracias!!