Integración Continua: ¿Qué es?

publicado a la‎(s)‎ 29 ago 2012, 22:24 por Eliu Montoya   [ actualizado el 20 sept 2012, 21:40 ]
Tema: Explicación a grandes rasgos de una plataforma de Integración Continua.
Categoria: Explicación concreta / Integración continua
Tecnologías / Componentes: Subversion, Jenkins, Nexus, Maven
Integración continua es una parte de mejora continua y el punto principal es automatizar el proceso de desarrollo, el cual abarca desde la programación hasta la liberación en producción, sea cual sean los pasos intermedios.  

Descripción

Para poder explicarlo mejor tomaré un ejemplo concreto:
Con integración continua en el área de desarrollo se podrá :
  • Un desarrollador inicia un proyecto desde cero y guarda el código en un versionador.
  • Los demas desarrolladores podrán accesar a dicho código y pueden codificar todos a la vez y hasta crear otros proyectos o modulos dependientes.
  • Mientras cada uno registra sus cambios en el versionador, un servidor de Integración Continua irá bajando cada versión y lo compilará en un ambiente independiente para asegurar que el código funciona en cualquier ambiente sin dependencias de configuración local.
  • El mismo servidor hará pruebas unitarias para asegurar que cada versión no ha sufrido una regresión en funcionalidad.
  • Después guardará el artefacto (el compilado, ejecutable, jar, war etc) en un repositorio de artefactos como versión SNAPSHOT o EN-DESARROLLO para que otros puedan usarlo. 
  • En caso que tenga proyectos dependientes,  este servidor también obtendrá el código del repositorio de versiones y hará la compilación y pruebas unitarias pero, obviamente, utilizando la versión que se está probando para asegurar que no solo el proyecto funciona sino que no haya provocado errores en sus proyectos o módulos que lo usan.
  • Después de verificar las pruebas unitarias, el servidor podrá ejecutar varias tareas escalonadas, tales como pruebas funcionales, siguiendo con pruebas de control de calidad de código, stress, etc.
  • Si todos esos pasos han concluido satisfactoriamente podrá hacer la implementación en algún ambiente, por ejemplo UAT o pruebas. Esto implica que ponga el ejecutable en algún contenedor (jboss, tomcat, etc), realice las configuraciones necesarias,  configure la base de datos, repositorios, etc para que funcione correctamente en dicho ambiente.
  • Después podrá ejecutar pruebas de aceptación sobre la reciente implementación para asegurar que la funcionalidad y requerimientos iniciales estén implementados. Estas pruebas son las mismas que se le entrega a los testers para validar cada caso de uso y escenario,  únicamente que estas son automatizadas.
  • Si las pruebas son correctas, el servidor podrá hacer nuevamente la implementación pero tal vez ahora en el ambiente de producción.  
  • Después podrá repetir las pruebas de aceptacion pero ahora con datos reales. Esto se convertiría en Pruebas de Integración ya que estariamos asegurando que la implementación esté correcta y el sistema esté integrado con los demás sistemas como base de datos, mensajeria y hasta redes.

Este ejemplo muestra la capacidad y gran ventaja que ofrece Integración Continua. Lo mas hermoso es que todo esto es automatizado y permite que mientras el desarrollador se dedica a lo suyo, que es codificar e ir avanzando en el proyecto, tras bambalinas se va probando lo que hizo y hasta puede terminar el producción. ¡¡Probablemente se pueden llevar 2 o 3 horas desde que el desarrollador sube algún cambio al repositorio hasta que se encuentre liberado en producción con todo y pruebas!!

¡Que gran ventaja es poder contar con esté framework!


Herramientas que Componen a Integración Continua


Si seguimos el ejemplo previo podemos extraer mínimo 4 componentes :
1. Un compilador de proyectos y administrador de dependencias  como Maven. También se les conoce como "build automation"
2. Un controlador de versiones o también conocido como SCM (source control manager o revision control) como Subversion o Git.
3. Un repositorio de artefactos que sirva para separar versiones liberadas y en desarrollo como Nexus o Artifactory.
5. Un servidor de integración continua como Jenkins o Bamboo
6. Una herramienta para pruebas de calidad de código como Sonar.

Prácticamente estos son los componentes mínimos. 

En los siguientes artículos iré detallando cada uno de los componentes, sus configuraciones mínimas y sus funcionalidades primarias.

Nota

existe una máquina virtual para virtualbox abierta que se llama Agilebox. Este appliance es gratuito gracias a lebrijo y es una máquina con Ubuntu donde ya vienen todos estos componentes instalados y configurados listo para comenzar a usarse.


Resumen.

Finalmente podemos concluir con las bondades y ventajas que una plataforma de integración continua nos puede dar :
  • Automatización de tareas para disminuir error humano.
  • Automatización de pruebas para poder hacer análisis y verlo todo en un tablero de control.
  • Disminución de responsabilidades extras a los desarrolladores, testers, integradores, etc.
  • Establecimiento de métricas y procesos definidos para optimizar y eficientar tiempo y calidad. 
  • Facilidad para obtener reportes de cada prueba y así poder integrar al usuario en el status de cada proyecto.  
  • Visibilidad de todos los proyectos y su relación entre varias dependencias.
  • Tener un repositorio centralizado tanto de códigos fuentes como de artefactos finales y la capacidad de poderlos dividir entre desarrollo y liberaciones.
  • Posibilidad de decrementar el tiempo para liberar a producción cambios y aumentando la calidad.}

Posts Similares

TituloDescripciónCategoriaTecnologíasTipoFecha de publicación
Subversión y Jenkins: cómo comunicarse entre ellos Como poder indicarle a Jenkins iniciar una actividad cuando Subversion ha sido actualizado Integración continua Subversion, Jenkins Tip 17 de septiembre de 2012 
Jenkins & Sonar: Status en jenkins refleje alertas de sonar Cómo poder mostrar en Jenkins el status real dependiendo de las alertas de Sonar Integración continua Subversion, Jenkins Tip 29 de agosto de 2012 
Web Tiers: Explicación Explicación sobre el concepto "tiers" en proyectos web. Diseño Servlets Explicación 1 de septiembre de 2009 
Tipo de Pruebas para Desarrollo de Software Explicación sobre los diferentes tipos de pruebas que se pueden hacer en el desarrollo de software Calidad XUnit, Sonar, PMD, Findbugs, Thucydides, Checkstyle, Cobertura Explicación 11 de septiembre de 2012 
Integración Continua: Promociones y Líneas de Producción  Explicación del concepto de promociones y pipelines en Integración Continua Integración continua Jenkins y plugins Explicación 27 de septiembre de 2012 
Mostrando 5 elementos de la página Indice de posts ordenados por hora de edición. Ver más »

Comments