23 Jan 2017

Integración continua - conceptos iniciales

Veamos los conceptos iniciales que hace falta entender para saber que es la Integración continua.

¿Empezamos?

Antes de empezar a hablar de herramientas y métodos de trabajo intentaremos entender que queremos hacer. En el post anterior vimos que era la integración continua (CI) , pero hablemos primero de lo que ya tenemos.

Necesitamos un proyecto de desarrollo software, ahora mismo nos da igual el lenguaje usado, para nuestro caso imaginemos una programa llamado "Super Tienda", una herramienta creada para gestionar un pequeño comercio.

En la primera fase del proyecto estamos desarrollando un proyecto usando nuestro entorno favorito, y compilamos nuestra herramienta usando algun tipo de comando, no colaboramos con nadie y lo tenemos guardado en una carpeta local llamada "Super Tienda". En esta situación inicial tenemos tres componentes :

  • El distribuible. Corresponde los ficheros ejecutables junto a todos los recursos que necesite (iconos, ficheros de configuración, etc...) que el usuario va a necesitar para ejecutar la aplicación y que esta funcione.
  • El repositorio del proyecto de desarrollo. Espacio donde guardamos el conjunto de ficheros de configuración, código fuente y recursos necesarios para construir el software. Como hemos dicho, sería una carpeta local del usuario.
  • El sistema de construcción. Básicamente, el elemento que permite que a partir de lo que hay en el repositorio se construye el distribuible. En este caso inicial vamos a tener un comando que se ejecuta desde un terminal. Algo simple como : ./build.sh

Como desarrollador tenemos por lo tanto algo como muestra la imagen :

Entorno de desarrollo de ejemplo

Una vez identificados estos elementos, vamos a ir viendo las diferentes situaciones que nos permiten ir mejorando nuestro entorno para llegar a un sistema de CI completo. Vamos a ver por partes el estado actual del proyecto ficticio.

El distribuible.

Por ahora estamos distribuyendo un fichero ZIP con el contenido de nuestra aplicacion, sin instalador ni nada por el estilo. No hay gestión para controlar si existen versiones anteriores ya instaladas, ni sistemas de conversion para mantener la compatibilidad hacia atras. El cliente tiene que tener una herramienta para descomprimir ficheros ZIP (en todos los sistemas operativos modernos por defecto hay alguna herramienta para hacerlo) y es responsable de su instalación, copias de seguridad, etc… Por ahora nos conformamos con esto, pero debemos de ir mejorando este sistema :

  • Instalador para windows, con sus accesos directos en el menu de inicio
  • Un instalador para linux (.deb, .rpm )
  • Control de versiones instaladas y lanzamiento de scripts  para actualizaciones.

Veremos poco a poco formas de generar diferentes tipos de distribuibles.

El repositorio

Ejemplo de sistema de control de versiones usando carpetas

Cuando trabajamos solos, solemos trabajar con un proyecto en una carpeta en local y con nos basta, sin embargo si no somos organizados nos encontramos con situaciones bastante complejas. Sin hablar de las copias de seguridad

Es por esto que tenemos que evaluar otro sistema de gestion del codigo. Existen infinidad de soluciones, las más comunes : GIT y Subversion

Veremos las formas de control de versiones que más nos pueda interesar.

El sistema de construcción

El sistema actual basado un simple script nos parece suficiente para construir el ZIP de distribuible, compila el código (si aplica) y genera el zip en una carpeta concreta.

Este sistema puede automatizarse, lanzar pruebas, generar alertas, publicar el resultado, generar documentación, etc… como podeis imaginar hay infinidad de opciones y es donde vamos a extendernos más.

Como sistema de construcción esta desde el script manual, make, ant, ivy, maven, gradle... para el proceso de construcción del proyecto. Y herramientas para automatizar como Jenkins, Bamboo, TravisCI…

Y más

Además de todo esto, tendremos que ver formas de publicar nuestro producto, analisis de la calidad del codigo, documentar el producto, y por supuesto, buenas prácticas.

Todos estos temas son los que iremos viendo poco a poco. Nos seguimos viendo en el blog.