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. View Slide

  2. View Slide

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

    View Slide

  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)

    View Slide

  5. Problemática

    View Slide

  6. View Slide

  7. View Slide

  8. View Slide

  9. View Slide

  10. ¿Qué es la
    Integración Continua?

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  18. Ingredientes para una rica
    Integración Continua

    View Slide

  19. View Slide

  20. View Slide

  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.

    View Slide

  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.

    View Slide

  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.

    View Slide

  24. ¿Qué se ejecuta en cada
    integración?

    View Slide

  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

    View Slide

  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.

    View Slide

  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.

    View Slide

  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.

    View Slide

  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.

    View Slide

  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.

    View Slide

  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.

    View Slide

  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.

    View Slide

  33. Las reglas del

    View Slide

  34. View Slide

  35. 1
    Haz commit frecuentemente

    View Slide

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

    View Slide

  37. 3
    Arregla los build rotos inmediatamente

    View Slide

  38. 4
    ¡¡Automatiza!!

    View Slide

  39. 5
    Todos los tests e inspecciones deben pasar

    View Slide

  40. 6
    Ejecuta los builds antes de hacer commit

    View Slide

  41. 7
    Optimiza los builds

    View Slide

  42. Ventajas & Desventajas

    View Slide

  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

    View Slide

  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

    View Slide

  45. Caja de herramientas

    View Slide

  46. Herramientas
    build
    análisis
    test
    servidores CI

    View Slide

  47. Herramientas
    build
    análisis
    test
    servidores CI

    View Slide

  48. View Slide

  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

    View Slide

  50. Apache Ant
    · Definición de tareas en XML
    · Programado y orientado para Java
    · Tareas habituales ya implementadas (javac, junit)
    · Multiplataforma
    · Ampliamente usado

    View Slide

  51. Phing
    · Alternativa PHP a Ant
    · Integración con el ecosistema de desarrollo PHP

    View Slide

  52. cualquier cosa
    Aunque se puede usar

    View Slide

  53. Herramientas
    build
    análisis
    test
    servidores CI

    View Slide

  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

    View Slide

  55. View Slide

  56. Herramientas
    build
    análisis
    test
    servidores CI

    View Slide

  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

    View Slide

  58. Análisis estático del código
    · Clover
    · phpcpd
    · PHP_Depend
    · phploc
    · PHP Mess Detector
    · PHP_CodeSniffer
    · PHP_CodeBrowser

    View Slide

  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.

    View Slide

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

    View Slide

  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.

    View Slide

  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.

    View Slide

  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, ...

    View Slide

  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.

    View Slide

  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

    View Slide

  66. Herramientas
    build
    análisis
    test
    servidores CI

    View Slide

  67. View Slide

  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

    View Slide

  69. View Slide

  70. View Slide

  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

    View Slide

  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

    View Slide

  73. View Slide

  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

    View Slide

  75. View Slide

  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

    View Slide

  77. View Slide

  78. Y mucho más...

    View Slide

  79. =
    Servidor CI
    Integración Continua
    /

    View Slide

  80. ¿Y qué pasa con
    Symfony2?

    View Slide

  81. Nada

    View Slide

  82. =
    CI con PHP
    CI con Symfony2

    View Slide

  83. Sólo analiza tus
    bundles

    View Slide

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

    View Slide

  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/

    View Slide

  86. [email protected]
    @tharandur
    ¿Preguntas?
    ¡¡Gracias!!

    View Slide