Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…
Hasta ahora ya hemos visto cómo crear Jobs en Jenkins. Partiendo del que hicimos en la última entrada ya podemos extenderlo (ya sea en un único job o en varios) para conseguir el proceso completo de compilar nuestro proyecto, incluyendo obtener el código GIT, compilar el proyecto y el correspondiente de test unitarios, ejecutar las pruebas y enviar resultados vía email.
Esto sería el “pack” básico, pero a partir de ahí podemos extenderlo según las necesidades. Podríamos desplegar versiones, compilar diferentes ramas desde nuestro repositorio, subir los proyectos a un servidor de preproducción, a un FTP, enviar resultados y comunicados, estadísticas,… y un sinfín de opciones.
Antes de continuar, os adjunto los links de las entradas anteriores:
Las pipelines de Jenkins vienen a ser una evolución de los jobs. En una pipeline se definen los diferentes pasos/operaciones del trabajo que vamos a realizar. Algo similar a como hemos hecho anteriormente en un Job, sólo que aquí tenemos mucha más libertad para definirlos.
Las pipelines al final no son más que un programa (escrito en Groovy) que puedes guardar en un fichero (o en un repositorio de código), por lo tanto podemos tener “versionado” de nuestros trabajos, al igual que hacemos con nuestro código. Esta es sólo una de las ventajas de las pipelines, algunas más las iré comentando a lo largo de esta entrada.
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…
Llegados a este punto (y vistas las entradas anteriores) ya tenemos completa nuestra configuración para poder automatizar un proyecto. Así que vamos a ver los pasos para generar nuestro primer proyecto en Jenkins que nos permitirá automatizar la generación/ejecución de la aplicación de pruebas unitarias (DUnitX).
Antes de continuar os dejo los links a las otras entradas de esta serie (las anteriores y las previstas):
Para poder continuar con el artículo, primero vamos a crear 2 proyectos de Delphi. El primero será nuestro proyecto de prueba y el segundo serán los Test Unitarios (con DUnitX) sobre ese proyecto.
Ambos ya los tenéis subidos al repositorio con el que estamos trabajando desde el inicio de las entradas de esta serie (ahora ya está público y accesible):
Proyecto de prueba: Continuaré con el proyecto que implementé en la primera entrada y que nos sirvió para ilustrar los primeros pasos con GIT. A este proyecto le he añadido una unit uFunciones.pas las funciones matemáticas básicas, sobre la que crearemos test unitarios con DUnitX. El formulario tiene una estructura como la que veis en la imagen.
Proyecto de Test Unitarios (DUnitX): Proyecto con DUnitX que contiene los test unitarios sobre las funciones definidas en la unit uFunciones.pas. La estructura de la clase de test es la que veis en la imagen siguiente.
He añadido unos cuantos tests que nos servirán para las pruebas.
No voy a profundizar mucho más, en esta entrada, en el tema de DUnitX y pruebas unitarias. Si os interesa saber más podéis revisar anteriores entradas que he publicado en el blog sobre TDD. En ellas he hablado sobre el tema. A continuación os dejo los links.
Por ahora para crear el proyecto de Jenkins, nos vamos a centrar en la aplicación de Test, ya que es el primero que debemos compilar y ejecutar en nuestro proceso (si los test unitarios fallan, ya no hace falta que sigamos con el resto).
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…
Una vez visto el paso previo de GIT, lo siguiente que necesitamos en “montar” nuestro servidor de automatización. Para ello he escogido Jenkins. Jenkins en un “Servidor de Automatización” Open Source escrito en java y que está basado en Hudson.
A continuación vamos a ver los pasos necesarios para instalar y configurar Jenkins.
INSTALACIÓN DE JENKINS
Una vez descargado el paquete correspondiente a nuestro sistema, comenzamos la instalación. Actualmente está disponible la versión v2.202, pero la verdad es que tanto las actualizaciones del sistema, como la de los múltiples plugins que posee son muy frecuentes.
Jenkins se instala como un servicio de Windows y la instalación no tiene más opciones que el directorio de destino, que podemos dejar el que propone por defecto. El acceso se realiza a través de un navegador web y utiliza por defecto el puerto 8080.
Una vez finalizada la instalación podemos comprobar que la consola de Servicios de Windows que se ha instalado correctamente y que está “Iniciado”. Se abrirá una ventana del navegador a la dirección: http://localhost:8080/
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…
Voy a dedicar varias entradas a hablar de Integración Continua con Delphi (a partir de ahora escribiré en algunos sitios CI –Continuous Integration– para abreviar).
Para no extenderme mucho voy a intentar dividir esta entrada en tres/cuatro entregas. Cada una de ellas centrada en un “pieza” importante de las que vamos repasar. Esta es la idea inicial, pero es posible que a medida que vaya desarrollando las otras, la cosa pueda cambiar.
Una definición de Integración Continua (que puede ser un término muy amplio) podría ser esta:
La integración continua es una práctica de desarrollo de software mediante la cual los desarrolladores combinan los cambios en el código en un repositorio central de forma periódica, tras lo cual se ejecutan pruebas y se generan versiones automáticas.
Es algo así como ir encadenando los diferentes pasos que habitualmente hacemos (o deberíamos hacer manualmente) de una forma automatizada.
VENTAJAS DE LA CI
¿Porqué utilizar Integración continua?
Utilizar esta metodología, como muchas otras, a priori puede generar una sensación de pérdida de tiempo y un trabajo extra, pero a la larga la automatización de tareas suele traer ventajas que al principio pueden no ser evidentes, pero que pasado un tiempo se hacen visibles.
¿Qué nos puede aportar introducir esta metodología en nuestros desarrollos?
Obtenemos mejoras en el rendimiento a la hora de desarrollar aplicaciones. Se dedica menos tiempo a tareas manuales y repetitivas. Se evita que con el tiempo se dejen de hacer cosas como las pruebas automáticas, ya que no hay que hacerlas manualmente.
Minimiza los errores. Al automatizar tareas, éstas se pueden realizar con más frecuencia. Además, si aparecen errores se detectan con más rapidez y permite corregirlos más rápido.
Se generan actualizaciones de nuestro software (builds, compilaciones, releases,…) con mayor rapidez y frecuencia. Se pueden realizar entregas (si son necesarias) de forma más continuada.
Documentación e historial de las versiones generadas, resultados de los tests, cambios,…
Concede al desarrollo una mayor seguridad y confiabilidad, y eso repercute en la confianza del equipo de trabajo.
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…