1- Integración continua con Delphi (GIT)
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.
1- Integración continua con Delphi (GIT)
2- Integración continua con Delphi (Jenkins) – Instalación
3- Integración continua con Delphi (Jenkins) – Primer proyecto
4- Integración continua con Delphi (Jenkins) – Pipelines
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.
Contenido
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.
COMPONENTES PARA CI
Para completar el proceso de Integración Continua vamos a explicar las siguientes piezas con las que vamos a trabajar.
- Sistema de control de versiones (en nuestro caso GIT –github-)
- Test Unitarios (en nuestro caso con DUnitX)
- Compilaciones y pruebas automatizadas (Utilizaremos Jenkins)
SISTEMA DE CONTROL DE VERSIONES (GIT)
Ya he hablado otras veces del Control de Versiones en el blog.
Hoy en día lo considero imprescindible para un programador, independientemente de que trabaje de forma individual o en equipo. En realidad para un equipo es imprescindible, pero a nivel individual también nos aporta muchas ventajas. Seguridad, historial de cambios, metodología de trabajo,…
Hay diferentes Sistemas de Control de Versiones. Posiblemente los que más utilizamos son SVN y GIT. Aunque las arquitecturas y la forma de trabajo tienen algunas diferencias, la base es la misma.
Para este artículo utilizaré GIT, pero los pasos son muy similares si trabajáis con otro.
Para ilustrar el artículo voy a explicar los pasos básicos para crear una cuenta en github, crear un repositorio y subir allí nuestro proyecto.
Utilizaremos https://github.com/gitbucket/gitbucket
Podemos crear una cuenta con el «Plan Individual», suficiente para realizar las pruebas.
Seleccionaremos nuestra experiencia en programación (¿?¿?¿? no tengo muy claro para qué nos solicitan esta información –aunque no es obligatoria-).
Y «Host a project (repository)» como uso que le vamos a dar al repositorio.
Después de validar la cuenta a través del email, podremos crear un nuevo Repositorio (almacén de datos).
- Inicializaremos con un fichero de Readme (plantilla)
- Seleccionaremos si queremos un repositorio Privado/Público. Independiente para nuestras pruebas (yo personalmente lo he creado como privado).
- “Add .gitIgnore”, nos permite seleccionar un fichero de “ignore” con la plantilla para Delphi. Significa que ya van configurados los ficheros que GIT debe ignorar para subir al repositorio. Por ejemplo, los ficheros: .exe, .dll, .dcu, .map, .tds, etc, etc, etc,…
- Seleccionaremos también una licencia de las disponibles.
Y ya podemos crear el repositorio.
Accedemos a la pantalla del Repositorio. En la sección de <Code> tenemos un fichero .gitignore, la licencia y el fichero Readme, acordes a lo que seleccionamos al crear el repositorio.
Si desplegamos el botón de [Clone or Download] tendremos la URL del repositorio. En mi caso es la siguiente:
https://github.com/NeftaliBlog/Ejemplos.git
CLIENTES GIT PARA WINDOWS
Hay herramientas para Windows que facilitan el trabajo con GIT (también para SNV) y también hay quien prefiere trabajar desde la línea de comandos; Eso ya va a gusto de cada uno.
Yo trabajo habitualmente con dos; GitExtensions y TortoiseGIT. Os dejo un par de imágenes de los menús de trabajo y los links para descargarlas.
Básicamente son herramientas que nos ofrecen un entorno visual para todas las opciones que posee GIT. Al final casi todas ellas acaban mostrándonos al realizar una operación, el comando de GIT correspondiente a la acción.
GITExtensions – https://github.com/gitextensions/gitextensions
TortoiseGIT – https://tortoisegit.org/
Lo primero que tenemos que hacer es Clonar nuestro repositorio de Github en nuestra máquina local. De esta forma podremos comenzar a gestionar proyectos. Para ello podemos utilizar la opción de Clonar (Git Clone) de las herramientas comentadas anteriormente.
Una vez clonado, añadimos nuestro proyecto dentro del repositorio y realizamos un Add. Con esto conseguiremos añadir los ficheros
Si utilizamos GitExtensions (a la que corresponde esta pantalla de clone)
Si lo hacemos con TortoiseGIT será la que veis a continuación:
Si el proceso se ha completado con éxito, nos aparecerá una ventana similar a esta (GITExtensions) y tendremos en local una copia exacta a nuestro repositorio de GitHub.
Y si revisamos el contenido del directorio, debería aparecer algo como lo que se ve a continuación. Ahora ya tenemos “un Clon” (una copia) de nuestro repositorio de github en local.
Repositorio github: https://github.com/NeftaliBlog/Ejemplos
Repositorio en Local: D:\PROYECTOS\Ejemplos Blog
(En mi caso yo lo he colocado aquí, vosotros tendréis otro directorio local a vuestro gusto)
AÑADIR PROYECTO AL REPOSITORIO
Lo siguiente que vamos a hacer es crear un nuevo proyecto y añadirlo a nuestro repositorio. Para esto, he creado un proyecto de “hola mundo” (dentro de nuestro repositorio local). Además he añadido una unit con las 4 funciones matemáticas básicas (suma resta, multiplicación y división), que luego nos servirá para diseñar test Tests Unitarios con DUnitX sobre estas funciones.
Realizaremos los pasos para añadirlo. No es la finalidad de este artículo repasar en profundidad el uso de GIT, así que no voy a entrar en más detalles. Los pasos a realizar son: ADD, COMMIT y PUSH.
Con esto conseguiremos subir nuestro proyecto desde nuestro repositorio local al de github.
Llegados a este punto, ya tenemos un repositorio local y nuestro repositorio de github sincronizados. Si a partir de ahora otro miembro del equipo quiere incorporarse al mismo proyecto bastaría con replicar los pasos en su equipo para “Clonar” el repositorio en su máquina. Cada uno trabaja en su repositorio local hasta que necesita integrar cambios en el repositorio de GIT.
A difencia de otras veces, no adjunto los ficheros del proyecto ya que podéis descargarlos directamente del repositorio de github.
BIBLIOGRAFÍA Y LINKS RELACIONADOS
Si queréis revisar más documentación sobre el tema, a continuación os dejo algunos links…
https://www.ender.es/2010/02/integracion-continua-proyectos-delphi-en-hudson/
https://aws.amazon.com/es/devops/continuous-integration/
https://www.youtube.com/watch?v=dhKGmp6KsNs
https://chapmanworld.com/2015/01/18/use-radstudio-with-jenkins-no-plugin/
http://thundaxsoftware.blogspot.com/2011/07/continuous-integration-for-your-delphi.html
https://christerblog.wordpress.com/2010/04/25/using-hudson-to-build-delphi-projects/
http://www.nickhodges.com/post/Getting-Hudson-set-up-to-compile-Delphi-Projects.aspx
Como siempre los comentarios, sugerencias y criticas “constructivas” son bienvenidas.
Hasta la próxima!!
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,…
No sabía que ese proceso se llamara integración contínua.
Yo uso gestión de versiones desde hace unos 20 años, incluso en mis proyectos personales.
Lo del Jenkins no lo conozco.
Saludos.
@casimiro
Bueno, digamos que hay varias piezas. El Control de Versiones, el Testing unitarios y la generación automática de versiones.
Todo el proceso es lo que se conoce como integración continua y programas como jenkins lo facilitan.
Digamos que este que propongo yo es el más básico, pero se pueden ir añadiendo más procesos para poder automatizarlos.
Thanks for this! Keep it going! :D