Qué es Jenkins
Jenkins es una herramienta open-source de automatización programada nativamente en Java que tiene como objetivo facilitar los procesos de integración continua y desarrollo continuo (CI/CD) .
La mayoría de productos basados en código necesitan actualizarse constantemente para añadir mejoras y reparar posibles fallos de programación. Para asegurar un producto de calidad, es importante que antes de actualizar el código que está en funcionamiento se revisen ciertos aspectos.
Por ejemplo, una práctica habitual es, que antes de que se actualice el código y se añada la nueva funcionalidad, este tenga que pasar unas pruebas. De no superarlas, la actualización no podrá ser incorporada.
Esto ayuda a no actualizar el código hasta que funcione a la perfección. Estos procedimientos reciben el nombre de CI/CD y normalmente son llevados a cabo por unos profesionales llamados DevOps , cuyo nombre proviene del inglés: Development Operations.
¿Qué es un programador senior?
¿Quieres saber qué es un programador senior? En este post te contamos todo lo que debes saber sobre estos expertos del desarrollo de software.
Ver artículoJenkins permite establecer todas las etapas que tendrá que pasar el código antes de poderse desplegar en producción. La primera fase es la de build donde se genera un entorno donde el código podrá ser ejecutado y testeado.
Normalmente, esta etapa de construcción o build se realiza dentro de un contenedor de Docker, para poder correr el programa en un entorno aislado y con las dependencias necesarias.
Una vez se ha construido el entorno donde el programa puede ser ejecutado, viene la fase de pruebas o tests . En esta etapa se ejecutan los tests unitarios y de integración que aseguraran que el código esté listo para su despliegue en el servidor de producción.
Finalmente, una vez se han pasado las pruebas el código ya puede ser actualizado con la nueva funcionalidad. Como veremos más adelante, se pueden definir otras etapas dentro de la pipeline de Jenkins, como por ejemplo, que se revise el estilo de programación para que cumpla con los estándares.
Integración de Jenkins con repositorios en la nube
En la mayoría de proyectos IT Jenkins siempre está integrado con algún repositorio de control de versiones en la nube, como puede ser Github, Gitlab o Bitbucket.
Otros posts que te gustarán
Cuando trabajamos con código, es importante controlar las diferentes versiones del mismo usando lo que se conocen como sistemas de control de versiones o VCS (Version Control System). Uno de los más conocidos es Github.
Estos sistemas permiten dividir el código en lo que se conoce como ramas o branches. Las ramas permiten bifurcar el código y trabajar con diferentes versiones del mismo. Por ejemplo, si yo quiero incorporar una nueva funcionalidad en mi programa, no lo haré en la versión de despliegue, sinó lo haré en una rama y cuando esté seguro de que todo está correcto entonces lo uniré con la rama principal (master branch), donde está el código que seré subido en el servidor de producción.
Aquí es donde entra en juego el papel de Jenkins. Es en este punto, cuando queramos unir nuestra funcionalidad dentro de nuestra rama con el código principal que Jenkins se encargará de comprobar que el código que he desarrollado es apto para poner en producción.
En este momento se ejecutará la pipeline de Jenkins. Si los diferentes pasos o stages de la pipeline fallan el nuevo código tendrá que ser revisado de nuevo antes de que pueda unirse con el código principal para su actualización.
¿Qué es una pipeline en Jenkins?
La pipeline es el conjunto de pasos definidos que el código tendrá que superar antes de poder ser enviado al servidor de producción. Como hemos mencionado antes brevemente existen tres fases o stages básicas. Estos son el: build, test y deploy.
- Build : se prepara el entorno con las dependencias y las variables de entorno necesarias para la ejecución efectiva del código. Normalmente se ejecuta en un contenedor de Docker.
- Test : en este punto se ejecuta el código dentro del contenedor y se pasan las diferentes pruebas unitarias y de integración que aseguran la buena funcionalidad y calidad del código.
- Deploy : se une la nueva funcionalidad con el código principal y se lleva a cabo el despliegue en producción.
Cómo crear la pipeline de Jenkin
Existen varias formas de especificar las diferentes etapas del proceso de integración continua. Con Jenkins podemos hacerlo a través de la UI que nos proporciona o crearla directamente en un archivo llamado Jenkinsfile.
Lo más común es emplear el archivo de Jenkinsfile para especificar cada una de las etapas y condiciones que tendrán que ejecutarse dentro del flujo de trabajo.
Seguidamente puedes ver un ejemplo de cómo se definiría una pipeline dentro del archivo de Jenkinsfile:
xxxxxxxxxx
pipeline {
agent none
stages {
stage('Build') {
agent {
docker {
image 'python:3.8-alpine'
}
}
steps {
sh 'python3.8 -m py_compile sources/prog.py sources/calc.py'
stash(name: 'compiled-results', includes: 'sources/*.py*')
}
}
}
}
El primer bloque debe siempre empezar con el comando de pipeline. Si se escribe fuera del bloque siempre saltará un error ya que no podemos definir lógica fuera del bloque de pipeline.
Después de pipeline vemos la instrucción de agent. Agent informa a Jenkins donde se ejecutará cada una de las fases de la integración continua. El primer agent vemos que pone none. Esto significa que los agentes correrán todos en el mismo sitio.
Seguidamente vemos stages el cual incorpora las diferentes etapas o stage que tendrán lugar. Dentro de cada etapa tenemos diferentes steps o pasos. Los pasos son las diferentes instrucciones que tenemos que dar a Jenkins para que pueda completar la etapa de forma satisfactoria.
Importante: El bloque de pasos (steps) es único para cada stage. No podemos definir más de uno.
Existe otro comando importante que podemos definir dentro de la pipeline de Jenkinsfile que recibe el nombre de post. Dentro de post pondremos las instrucciones necesarias que tienen que llevarse a cabo después de que se haya ejecutado la pipeline de Jenkins.
Normalmente sirve para limpiar y borrar datos de archivos o de base de datos que ya no nos interesan.
Lo que hemos visto ahora es simplemente un resumen de qué son las pipelines dentro de Jenkins. No obstante, para poder ejecutar de forma efectiva estos flujos de trabajo se requiere de más conocimiento y mirar manuales paso a paso de cómo realizar cada unos de los pasos.
Ventajas de usar Jenkins para CI/CD
Jenkins tiene muchas ventajas y por esa razón es de las herramientas de integración continua más usadas dentro del sector del desarrollo y programación:
- Jenkins es de código abierto y está respaldado por una gran comunidad de desarrolladores.
- Es una herramienta muy versátil gracias al gran número de integraciones y plugins que se han diseñado para extender su funcionalidad.
- Al ser open-source es una herramienta totalmente gratuita.