Pipelines en Gitlab, el camino hacia el CI/CD (parte I)

En esta entrada se dará una visión general sobre qué es y cómo configurar un Gitlab Runner. También se explicará qué es y cómo configurar un pipeline. Por último, se enseñará un pequeño proyecto-ejemplo para poner en práctica los conocimientos adquiridos.

En una entrada anterior explicamos la teoría del CI/CD, en qué consiste y para qué sirve. La teoría está bien, pero no hay nada mejor para terminar de asimilar la teoría que un buen ejemplo de uso práctico.

Hemos elegido Gitlab para este fin ya que, en nuestra opinión, es muy fácil de instalar, configurar, mantener y visualmente es muy sencillo de comprender.

Nota: Este artículo no cubrirá el proceso de instalación de Gitlab en sí. Damos por hecho que el público al que este artículo está dirigido dispone de una instalación de Gitlab o, en su defecto, cuenta con los conocimientos y habilidades suficientes para llevar al cabo la instalación por su cuenta.

Nota: Todas las explicaciones en este artículo se harán partiendo de la premisa de que se dispone de una instalación de Gitlab CE 12.8, es decir, la última versión gratuita de Gitlab disponible en este momento. No se mencionarán características disponibles únicamente en la versión de pago.

Nota: Los ejemplos están basados en un Debian Buster (10).

Nota: Se da por hecho que el público al que este artículo está dirigido tiene unas nociones básicas sobre el uso de Git y Gitlab: entiende lo que es un grupo, un proyecto, un commit, etc…

Sigue leyendo

¿Qué son las pruebas unitarias y la cobertura de código?

En esta entrada se explicará, en un lenguaje accesible incluso para personas que no poseen habilidades de programación, qué son y para qué sirven las «pruebas unitarias» o «unit tests» y los beneficios que podemos obtener si los usamos. También se explicará el término «cobertura de código» o «code coverage» y el uso que se le da.

Desarrollar el código de nuestro proyecto no es la única tarea de la que se debe encargar nuestro equipo de desarrollo. De hecho, hay toda una serie de asuntos que deben ser tratados, pero en esta entrada nos centraremos en las pruebas unitarias o «unit tests».

Sigue leyendo

Infraestructura inmutable y despliegue azul/verde

En esta entrada se explicará el significado del término «infraestructura inmutable» y las ventajas que supone aplicar la metodología de despliegue «azul/verde». También se definirá el concepto de tratar a los servidores como «mascotas o ganado».

Cualquiera que haya necesitado desplegar código a un servidor ha tenido que hacer frente a la inevitable situación de tener que actualizar dicho código. Ya sea porque ha surgido un fallo en el código y ha de corregirse, ya sea porque está disponible una nueva característica en una versión más reciente de dicho código, ya sea cualquier otro motivo.

El método más básico, por el que probablemente todo el mundo ha pasado, es el de copiar manualmente archivos de su propio ordenador al servidor en cuestión mediante FTP, SFTP o SCP (usando FileZilla, WinSCP, scp, rsync, etc…). También existen métodos alternativos un poco más avanzados (aunque a efectos prácticos de igual índole), como por ejemplo el uso de Capistrano, Fabric, etc…

Sigue leyendo

La aplicación de 12 factores

En esta entrada se hablará sobre todos los puntos considerados actualmente como «mejores practicas» a la hora de desarrollar una aplicación web. Cumplir dichos puntos ayudará tanto al equipo de desarrollo como al equipo de administradores de sistemas a realizar sus respectivos trabajos. Como bonus adicional, tras cumplir con dichos puntos, obtendremos una aplicación que podrá ser escalada de manera horizontal.

El mundo del desarrollo de software es complejo y que una determinada pieza de software funcione correctamente requiere algo más que buen código. Requiere de la integración y colaboración de dos equipos: programadores y administradores de sistemas.

Los programadores quieren tener comodidad a la hora de desarrollar y muchas veces tienden a desarrollar sin tener en cuenta los requisitos que se van a tener que cumplir para desplegar lo que están produciendo. Por otro lado, los administradores de sistemas quieren ser capaces de realizar sus tareas de la manera más efectiva posible, lo cual, en ocasiones, puede entrar en conflicto con el resultado que los programadores han generado.

Sigue leyendo

Integración continua y despliegue continuo

En esta entrada se definirán varios conceptos básicos relacionados con la automatización de las tareas que ejecutamos antes de desplegar nuestro código, así como la automatización de los despliegues en sí. También se describirán las metodologías más comunes que permiten unir estos conceptos y usarlos como un conjunto.

Integración continua

Durante el proceso de desarrollo de nuestro proyecto, sobre todo cuando en el mismo participa un número elevado de personas, pueden existir una serie de tareas que queramos ejecutar para facilitar el trabajo en equipo y mantener el buen estado del proyecto. Estas tareas pueden ser de cualquier tipo, desde una simple comprobación del código en busca de errores de sintaxis o de formateo incorrecto, hasta la ejecución de pruebas unitarias, pasando por el análisis estático y/o dinámico del código en busca de posibles vulnerabilidades, etc…

Sigue leyendo