Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

¿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)

Slide 5

Slide 5 text

Problemática

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

¿Qué es la Integración Continua?

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

Ingredientes para una rica Integración Continua

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

¿Qué se ejecuta en cada integración?

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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.

Slide 27

Slide 27 text

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.

Slide 28

Slide 28 text

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.

Slide 29

Slide 29 text

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.

Slide 30

Slide 30 text

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.

Slide 31

Slide 31 text

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.

Slide 32

Slide 32 text

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.

Slide 33

Slide 33 text

Las reglas del …

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

1 Haz commit frecuentemente

Slide 36

Slide 36 text

2 No hagas commit de código erróneo

Slide 37

Slide 37 text

3 Arregla los build rotos inmediatamente

Slide 38

Slide 38 text

4 ¡¡Automatiza!!

Slide 39

Slide 39 text

5 Todos los tests e inspecciones deben pasar

Slide 40

Slide 40 text

6 Ejecuta los builds antes de hacer commit

Slide 41

Slide 41 text

7 Optimiza los builds

Slide 42

Slide 42 text

Ventajas & Desventajas

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

Caja de herramientas

Slide 46

Slide 46 text

Herramientas build análisis test servidores CI

Slide 47

Slide 47 text

Herramientas build análisis test servidores CI

Slide 48

Slide 48 text

No content

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

cualquier cosa Aunque se puede usar

Slide 53

Slide 53 text

Herramientas build análisis test servidores CI

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

No content

Slide 56

Slide 56 text

Herramientas build análisis test servidores CI

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

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.

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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.

Slide 62

Slide 62 text

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.

Slide 63

Slide 63 text

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

Slide 64

Slide 64 text

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.

Slide 65

Slide 65 text

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

Slide 66

Slide 66 text

Herramientas build análisis test servidores CI

Slide 67

Slide 67 text

No content

Slide 68

Slide 68 text

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

Slide 69

Slide 69 text

No content

Slide 70

Slide 70 text

No content

Slide 71

Slide 71 text

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

Slide 72

Slide 72 text

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

Slide 73

Slide 73 text

No content

Slide 74

Slide 74 text

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

Slide 75

Slide 75 text

No content

Slide 76

Slide 76 text

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

Slide 77

Slide 77 text

No content

Slide 78

Slide 78 text

Y mucho más...

Slide 79

Slide 79 text

= Servidor CI Integración Continua /

Slide 80

Slide 80 text

¿Y qué pasa con Symfony2?

Slide 81

Slide 81 text

Nada

Slide 82

Slide 82 text

= CI con PHP CI con Symfony2

Slide 83

Slide 83 text

Sólo analiza tus bundles

Slide 84

Slide 84 text

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

Slide 85

Slide 85 text

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/

Slide 86

Slide 86 text

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