CI/CD The Series: Aprende a Crear tu Primer Pipeline de Jenkins con Roxs


Es muy común encontrar procesos de despliegue basados en scripts manuales con documentación obsoleta o, en el peor de los casos, ¡sin ninguna! 🤔. ¿Cuánto tiempo tarda tu nuevo código en desplegarse en producción? ¿Un viernes por la tarde? ¿Cuántos despliegues puedes realizar a la semana? ¿Y al día? 🔥
Si alguna vez has tenido que lidiar con estos problemas, no te preocupes, no estás solo. La buena noticia es que ¡puedes resolverlo de manera rápida y eficiente! Hoy comenzamos con "CI/CD The Series", y en esta primera entrega vamos a hablar de Jenkins, la herramienta de automatización de tareas en procesos de integración continua (CI) más extendida. Vamos a entender qué es Jenkins, cómo funciona, para qué sirve y, por qué es una de las mejores opciones si queremos aplicar CI en nuestros proyectos de software. Además, explicaremos de forma sencilla en qué consiste la práctica de la integración continua y por qué es tan crucial en el mundo del desarrollo ágil y la entrega de software.
¿Qué es CI (Integración Continua)?
La integración continua (CI) es una práctica fundamental en el desarrollo de software moderno. En términos simples, se refiere a la acción de integrar cambios de código frecuentemente en un repositorio compartido. Los desarrolladores no esperan semanas para realizar cambios masivos, sino que lo hacen de manera continua, integrando los cambios a medida que avanzan. Esto permite a los equipos detectar errores rápidamente y mantener la calidad del código constantemente.
Beneficios de la CI:
Desarrollo más rápido: Al integrar cambios pequeños y frecuentes, los desarrolladores pueden detectar errores más rápidamente.
Menos conflictos de código: La integración continua ayuda a reducir los conflictos de código que suelen ocurrir cuando varias personas trabajan en una misma base de código durante largo tiempo sin integración.
Mejora de la calidad: Las pruebas automáticas frecuentes permiten encontrar errores más pronto, lo que significa que los desarrolladores pueden corregir los fallos antes de que se conviertan en problemas críticos.
Entrega continua: Al facilitar la integración de todos los cambios, se hace más fácil implementar la práctica de entrega continua (CD), donde cada cambio pasa por un proceso automático de pruebas y despliegue.
Con la entrega continua, se crean, prueban y preparan automáticamente los cambios en el código y se entregan para la fase de producción. La entrega continua amplía la integración continua al implementar todos los cambios en el código en un entorno de pruebas y/o de producción después de la fase de creación.
Siempre fue un gran desafío para las empresas establecer, configurar y administrar un flujo de trabajo constante. Debido a los rápidos cambios de los últimos años, el desarrollo de software ha dado un gran paso adelante desde la introducción de la integración continua y la entrega continua (CI/CD). Ahora que comprende el papel que desempeña la CI en el desarrollo de software, podemos pasar al objetivo central de este tutorial de pipeline de Jenkins. by Roxs
¿Por qué Jenkins es una de las mejores opciones para CI/CD?
Jenkins es el servidor de CI más popular y utilizado, diseñado para facilitar la integración continua y la entrega continua. Con más de 23.9k estrellas en GitHub y 9.1k forks, Jenkins es conocido por su flexibilidad y la capacidad de automatizar casi todos los aspectos del ciclo de vida del software.
Ventajas de Jenkins:
Automatización total: Jenkins permite automatizar completamente los procesos de construcción, pruebas y despliegue, eliminando tareas manuales tediosas y propensas a errores.
Extensibilidad mediante plugins: Jenkins cuenta con una enorme cantidad de plugins que lo hacen muy versátil. Puedes integrar Jenkins con herramientas de testing, bases de datos, servicios en la nube como AWS, y mucho más.
Escalabilidad: Desde proyectos pequeños hasta sistemas a gran escala, Jenkins se adapta fácilmente a proyectos de cualquier tamaño y complejidad.
Código abierto: Al ser open-source, Jenkins permite modificaciones y personalización para adaptarse a las necesidades específicas de tu equipo y flujo de trabajo.
Interfaz web intuitiva: Jenkins es fácil de manejar gracias a su interfaz web que te permite configurar tus pipelines de manera visual, aunque también puedes hacerlo directamente con código.
¿Cómo funciona Jenkins en un flujo de trabajo CI/CD?
Jenkins actúa como el corazón del flujo de trabajo CI/CD. Usando Jenkinsfiles (archivos de configuración en Groovy), puedes definir qué pasos se deben ejecutar automáticamente cuando se realiza un commit o pull request en tu repositorio de código.
Un flujo de trabajo típico de Jenkins implica varios pasos automatizados:
Checkout del código: Jenkins descarga el código desde un repositorio de control de versiones como Git.
Compilación: Se compila el código (si aplica), asegurando que no haya errores de sintaxis.
Pruebas: Ejecuta pruebas automatizadas para validar la integridad del código.
Despliegue: Si las pruebas pasan con éxito, el código se despliega en un entorno de staging o producción.
Con Jenkins, este proceso se convierte en algo automático, eliminando los errores humanos y acelerando el tiempo de entrega.
Tipos de Pipelines en Jenkins
Jenkins ofrece dos tipos de pipelines:
1. Scripted Pipeline:
Este es el modelo tradicional y más flexible, pero también es más complejo. Se utiliza Groovy para escribir un pipeline que te permite un control total sobre el proceso.
2. Declarative Pipeline:
Este tipo de pipeline es más simple y accesible, especialmente para quienes se inician en Jenkins. Usando una sintaxis más amigable y estructurada, los pipelines declarativos permiten escribir las etapas de CI/CD de forma más clara y fácil de entender.
SCRIPTED PIPELINE | DESCRIPTED PIPELINE |
Modelo de programación imperativo | Modelo de programación declarativo |
Entorno de programación con todas las funciones | Sintaxis más simple y pragmática para la creación de Jenkins pipeline |
Gran flexibilidad y extensibilidad | Limitado a lo que puede hacer un usuario |
Se declara y ejecuta mediante nodos | Se declara y ejecuta mediante el comando pipeline y los diferentes stages, stage, steps y step |
No hay muchas limitaciones para usuarios expertos y requerimientos complejos | La mejor opción para el desarrollo de estrategias de CI y CD con Pipelines |
Sintaxis de un Pipeline Declarativo:
Un ejemplo simple de un pipeline declarativo en Jenkins:
pipeline {
agent any
stages {
stage('Stage: Hola Mundo') {
steps {
echo 'Paso 1: Hola Mundo'
}
}
stage('Stage: Segundo Stage') {
steps {
echo 'Paso 2: Hola Dos Veces'
echo 'Paso 3: Hola Tres Veces'
}
}
}
}
Este código define un pipeline con dos etapas (stages): una que imprime "Hola Mundo" y otra que imprime "Hola Dos Veces" y "Hola Tres Veces". ¡Imagina lo que podrías hacer con un pipeline real de construcción y despliegue!
¿Cómo instalar Jenkins?
Jenkins se puede instalar de varias maneras, pero la forma más rápida y sencilla es usando Docker. Esto te permite tener Jenkins corriendo en minutos sin preocuparte por la configuración del sistema.
Instalación con Docker:
docker run -p 8080:8080 -p 50000:50000 -d --name jenkins --restart=always jenkins/jenkins:alpine
Una vez que Jenkins esté en funcionamiento, puedes acceder a él a través de tu navegador en http://localhost:8080
. ¡Y listo! Ahora puedes comenzar a configurar tu primer pipeline.
Desbloquear Jenkins: Abre tu navegador en http://localhost:8080 y usa la contraseña que se encuentra en:
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
Instalación en Ubuntu:
Si prefieres instalar Jenkins directamente en un sistema Ubuntu, sigue estos pasos:
Instalar Java: Jenkins requiere Java, así que asegúrate de tenerlo instalado. Puedes instalar OpenJDK con el siguiente comando:
sudo apt install -y openjdk-21-jre
Agregar el repositorio de Jenkins:
sudo wget -O /etc/apt/keyrings/jenkins-keyring.asc https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key echo "deb [signed-by=/etc/apt/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/" | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null sudo apt-get update sudo apt install -y jenkins
Iniciar Jenkins:
sudo systemctl start jenkins sudo systemctl status jenkins
Desbloquear Jenkins: Abre tu navegador en
http://localhost:8080
y usa la contraseña que se encuentra en:sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Espera hasta que se instalen todos los complementos. Cuando finalice la instalación, haga clic en continúar.
Iniciando Jenkins
Cree un perfil de administrador para Jenkins. Ingrese los detalles requeridos y haga clic en Guardar y continuar.
Sabemos que siempre cuando es la primera vez, usamos user y pass admin:admin xD bueno tratemos que si es un ambiente productivo colocar pass con mas seguridad
Finalmente, el proceso de configuración está hecho, y el anterior es el predeterminado,
¡Bienvenido a Jenkins! .
10 Plugins Esenciales para Jenkins
Jenkins es increíblemente flexible y potente, y gran parte de esa flexibilidad se debe a su sistema de plugins. Con los siguientes 10 plugins podrás integrar Jenkins con diversas herramientas y servicios, facilitando aún más tu flujo de trabajo CI/CD.
1. AWS Credentials Plugin
Este plugin permite que Jenkins gestione y utilice las credenciales de AWS para integrarse con servicios de Amazon Web Services, como S3, EC2, Lambda, etc. Es fundamental para la integración de Jenkins con la nube.
2. Docker Pipeline Plugin
Este plugin permite que Jenkins interactúe con Docker para crear contenedores, ejecutar pruebas dentro de contenedores y más. Es esencial si usas Docker en tu flujo de trabajo.
3. Blue Ocean Plugin
Blue Ocean redefine la experiencia de usuario en Jenkins. Este plugin te proporciona una interfaz más moderna y visual para configurar, ejecutar y monitorear tus pipelines.
4. GitHub Plugin
Este plugin conecta Jenkins con GitHub, permitiendo disparar pipelines automáticamente cuando se realizan cambios en repositorios de GitHub.
5. SonarQube Scanner Plugin
El plugin SonarQube Scanner para Jenkins facilita la integración de Jenkins con SonarQube, permitiendo realizar análisis de calidad de código automáticamente.
6. Slack Notification Plugin
Este plugin envía notificaciones a canales de Slack cada vez que un job o un pipeline cambia de estado. Ideal para mantener al equipo informado sobre el estado de las tareas.
7. GitLab Plugin
El plugin de GitLab integra Jenkins con los repositorios GitLab, permitiendo que las tareas de Jenkins se ejecuten cada vez que se haga un commit o un pull request en un repositorio GitLab.
8. Pipeline Utility Steps Plugin
Este plugin proporciona pasos adicionales para manipular archivos y ejecutar comandos útiles dentro de los pipelines, como la creación de archivos, lectura y escritura de variables, etc.
9. Email Extension Plugin
El plugin de Email Extension permite enviar correos electrónicos en función de los resultados de las compilaciones. Es útil para alertar a los miembros del equipo si algo sale mal durante el proceso de integración.
10. Jira Plugin
Si utilizas Jira para gestionar los tickets de tu proyecto, este plugin te permite conectar Jenkins con Jira y asociar automáticamente los builds con tickets específicos.
¡Vamos a Crear Nuestro Primer Pipeline!
Ejemplo Simple de Pipeline en Jenkins:
A continuación, te mostramos un Jenkinsfile básico que realiza las siguientes acciones:
Compila el código.
Ejecuta pruebas.
1. Crea un Nuevo Proyecto en Jenkins
Inicia sesión en Jenkins y haz clic en Nuevo Elemento.
Selecciona la opción Pipeline como tipo de proyecto. Este tipo de proyecto te permitirá definir tu pipeline mediante un Jenkinsfile.
Dale un nombre descriptivo a tu proyecto, como "MiPrimerPipeline" o algo relacionado con tu aplicación.
2. Define tu Jenkinsfile
En la configuración de tu nuevo proyecto, busca la sección Pipeline.
En el campo Pipeline Script, define tu Jenkinsfile, que es el archivo donde escribirás las etapas (stages) de tu pipeline.
pipeline {
agent any
stages {
// Etapa de compilación
stage('Build') {
steps {
echo 'Compilando el código...'
// Aquí puedes agregar tu comando de compilación, por ejemplo:
sh 'echo "Compilación exitosa!"'
}
}
// Etapa de pruebas
stage('Test') {
steps {
echo 'Ejecutando las pruebas...'
// Aquí puedes agregar el comando para ejecutar pruebas, por ejemplo:
sh 'echo "Pruebas exitosas!"'
}
}
}
}
3. Guarda y Ejecuta tu Pipeline
Una vez que hayas definido tu Jenkinsfile, haz clic en Guardar para guardar la configuración del proyecto.
Para ejecutar el pipeline, haz clic en Construir ahora. Jenkins comenzará a ejecutar cada etapa que hayas definido en el Jenkinsfile.
Puedes ver el progreso en la consola de Jenkins mientras se ejecutan las etapas, y si alguna falla, podrás revisar los logs para identificar el problema.
4. Observa el Progreso y Resultados
Una vez que el pipeline se haya ejecutado, podrás ver el estado de cada etapa (Build, Test). Si todo sale bien, tu pipeline se completará exitosamente.
Si alguna de las etapas falla (por ejemplo, en las pruebas), Jenkins te mostrará los logs detallados para que puedas identificar y corregir el error.
¿Qué hace este pipeline?
- Este pipeline no está haciendo realmente una compilación o ejecutando pruebas reales, pero es un buen punto de partida. Lo importante aquí es que ya estás viendo cómo se estructura un pipeline en Jenkins.
Tip Importante para Docker:
Recuerden usar el parámetro restart: always
cuando configuren Jenkins en Docker. Esto es crucial, ya que si instalas plugins o realizas cambios en la configuración, Jenkins necesitará reiniciarse. Si no tienes este parámetro configurado, tu contenedor no se reiniciará automáticamente y tendrás que hacerlo manualmente cada vez que actualices Jenkins o añadas nuevos plugins.
Por ejemplo, al ejecutar Jenkins en Docker, usa el siguiente comando para asegurarte de que el contenedor se reinicie automáticamente:
docker run -p 8080:8080 -p 50000:50000 -d --name jenkins --restart=always jenkins/jenkins:alpine
Este pequeño ajuste te ahorrará mucho tiempo y asegurará que Jenkins se reinicie correctamente tras cualquier cambio importante, como la instalación de plugins o actualizaciones.
Resumen de la instalación con Ubuntu
Bonus Track: Curso Gratuito de Jenkins - ¡Aprende desde Cero! 🚀
Si estás listo para dar el siguiente paso y profundizar aún más en Jenkins, te recomiendo este curso gratuito ofrecido por la Linux Foundation. Se llama Introduction to Jenkins (LFS167) y está diseñado para enseñarte todo lo que necesitas saber para implementar flujos de trabajo de Integración Continua (CI) y Entrega Continua (CD) utilizando Jenkins. 💻🔧
¿Quién debería tomar este curso?
Este curso es ideal para equipos que estén considerando usar Jenkins como herramienta CI/CD y busquen automatizar su proceso de entrega de software. También es perfecto para quienes necesiten pautas sobre cómo configurar un flujo de trabajo de CI/CD usando el servidor de automatización Jenkins.
Lo que aprenderás:
El rol de Jenkins en el ciclo de vida del desarrollo de software.
Cómo configurar y acceder al servidor de automatización Jenkins.
Cómo construir tu software configurando y ejecutando varios tipos de proyectos Jenkins.
Instalación y gestión de plugins.
Cómo escalar y asegurar Jenkins.
¿Qué te preparará para hacer?
Al completar este curso, tendrás una comprensión sólida de:
El papel de Jenkins en CI/CD.
Cómo instalar Jenkins y gestionar proyectos.
Integración con terceros mediante plugins.
Cómo asegurar y escalar Jenkins para grandes proyectos.
Este curso te proporcionará todas las herramientas necesarias para convertirte en un experto en Jenkins y llevar tus pipelines al siguiente nivel. Además, es completamente gratuito. 🎓
Puedes comenzar el curso aquí:
Introducción a Jenkins (LFS167)
¡No pierdas la oportunidad de mejorar tus habilidades en CI/CD con Jenkins! 🌟
Conclusión:
Aunque todo esto pueda parecer complejo al principio, la magia de Jenkins está en la automatización. ¡No más scripts manuales, no más errores humanos! Jenkins facilita todo el proceso de desarrollo y despliegue, y lo mejor es que puedes empezar a trabajar con él en minutos.
La CI/CD no es solo para grandes empresas, es para cualquier desarrollador que quiera llevar su proceso de entrega de software al siguiente nivel. ¡Anímate a probar Jenkins y a ver cómo mejora tu flujo de trabajo!
¡Mantente Onfire! 🔥
Si te ha gustado este tutorial, ¡espera la parte II de "CI/CD The Series" sobre Jenkins! Mientras tanto, puedes seguirme en mis redes sociales para mantenerte al día con todo lo relacionado a DevOps, RoxsOps y CI/CD.
Sígueme en:
GitHub: https://github.com/roxsross
LinkedIn: https://www.linkedin.com/in/roxsross/
Linktree: https://roxs.295devops.com
¡Hasta la próxima! 💪🚀
Subscribe to my newsletter
Read articles from Rossana Suarez directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Rossana Suarez
Rossana Suarez
Soy Roxs 👩💻| Software Developer | DevOps | DevSecOps | en @295DevOps 🖼 Content Creator. No se puede crecer si no estas dispuesto a saltar a la zona de peligro 🔥