Introducción a la Integración Continua con Jenkins
Jenkins es una herramianta popular de CI/CD. ¿Qué significa CI/CD? Los conceptos centrales de CI/CD se pueden resumir en tres puntos:
- Integración Continua
- Entrega Continua
- Despliegue Continuo
En esencia, se trata de un flujo de trabajo que combina diferentes ramas de código en la rama principal, empaquetando, compilando, probando y desplegando automáticamente en el entorno de producción.
En este tutorial, demostraremos cómo automatizar el despliegue de un proyecto SpringBoot utilizando Jenkins en un servidor de Alibaba Cloud. Primero, necesitarás crear una instancia en la plataforma de Alibaba Cloud (ofrecen periodos de prueba gratuitos).
Configuración del Servidor
Una vez creada la instancia, accede a ella y selecciona tu ID de instancia. Luego, configura las reglas del grupo de seguridad para permitir el acceso externo a todos los puertos necesarios:
- Selecciona la lista de grupos de seguridad
- Haz clic en "Configurar reglas"
Si no configuras las reglas de acceso a los puertos, no podrás acceder a ellos desde fuera de la red.
Instalación de Jenkins
Descarga Jenkins desde su sitio oficial: https://www.jenkins.io/download/. Conectado a tu servidor, ejecuta:
wget https://get.jenkins.io/war-stable/2.387.3/jenkins.war
Después de la descarga, inicia Jenkins con el siguiente comando:
java -jar jenkins.war --httpPort=8080
Accede a http://tu-ip:8080 en tu navegador. Verás la pantalla de instalación inicial. Ingresa la contraseña generada para desbloquear Jenkins. Luego, instala los plugins recomendados y crea un usuario. Refresca la página e inicia sesión con tu nueva cuenta.
Instalación de Plugins Esenciales
Después del inicio exitoso, instala tres plugins fundamentales:
- Maven Integration: Herramienta de construcción con Maven
- Publish Over SSH: Permite transferir archivos empaquetados desde Jenkins al servidor de aplicaciones
- Gitee: Facilita el trabajo con repositorios de Gitee
Ubica estos plugins en la sección de gestión de plugins de Jenkins, instálalos y reinicia el sistema.
Configuración del Entorno Java
Instala Java 11 usando el administrador de paquetes de tu distribución:
yum install -y java-11-openjdk
El directorio de instalación estará en /usr/lib/jvm. Navega a este directorio para identificar el nombre exacto del directorio de JDK 11. Luego, configura la variable de entorno JAVA_HOME:
vi /etc/profile
Agrega las siguientes líneas al archivo:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.19.0.7-1.el7_9.x86_64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
Aplica los cambios con:
source /etc/profile
Verifica la instalación ejecutando:
java -version
Instalación de Maven
Descarga Maven con el siguiente comando:
wget https://dlcdn.apache.org/maven/maven-3/3.9.2/binaries/apache-maven-3.9.2-bin.tar.gz
Extrae el archivo descargdao para completar la instalación.
Configuración de Herramientas en Jenkins
Navega a la configuración global de herramientas en Jenkins para configurar Java, Git y Maven:
- Configura la ruta del JDK
- Configura Git (asegúrate de haberlo instalado en el servidor con
yum install git) - Configura la ruta de instalación de Maven
Configuración de Conexiones SSH y Repositorios
Busca la configuración de Publish over SSH y añade un nuevo servidor SSH:
- Dirección IP del servidor
- Nombre de usuario
- Contraseña
Luego, configura el acceso a tu repositorio de Gitee:
- Ve a "Agregar > Jenkins"
- Ingresa tu nombre de usuario y contraseña de Gitee
Creación de un Nuevo Trabajo en Jenkins
Selecciona "Proyecto Maven" y proporciona un nombre para tu trabajo. Configura:
- Dirección del repositorio de Gitee
- Cuenta de Gitee a utilizar
- Rama del proyecto
- Programación de builds (si es necesario)
- Comandos de construcción
Configuración del Despliegue
Configura la transferencia de archivos y el comando de inicio:
#!/bin/bash
# Configuración de Java
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.19.0.7-1.el7_9.x86_64
export PATH=$JAVA_HOME/bin:$PATH
# Rutas
APP_DIR=/opt/data
JAR_FILE=mi-aplicacion-0.0.1-SNAPSHOT.jar
# Detener aplicación existente
PID=$(ps -ef | grep $JAR_FILE | grep -v grep | awk '{print $2}')
if [ -n "$PID" ]; then
kill -9 $PID
fi
# Iniciar nueva aplicación
nohup java -jar $APP_DIR/$JAR_FILE > $APP_DIR/salida.log 2>&1 &
# Verificar inicio
sleep 30
tail -n 50 $APP_DIR/salida.log
En el servidor, crea el directorio /opt/data y guarda el script anterior como deploy.sh con permisos de ejecución:
chmod +x /opt/data/deploy.sh
Primer Build Manual
Haz clic en "Aplicar y guardar", luego en "Construir ahora". Verifica el resultado en la consola de Jenkins. Si ves "BUILD SUCCESS", el despliegue fue exitoso.
Puedes acceder a tu aplicación en http://tu-ip-publica:puerto/ruta para verificar su funcionamiento.
Configuración de Automatización con Webhooks
Para habilitar builds automáticos al subir cambios, configura un webhook en Gitee:
- En tu proyecto de Gitee, ve a la pestaña "Administración"
- Selecciona "WebHooks" en el menú izquierdo
- Haz clic en "Agregar WebHook"
- Pega la URL de Jankins con el formato:
http://usuario-jenkins:contrasena-jenkins@ip-publica:puerto/githook/notify - Haz clic en "Probar" para verificar la configuración
Si recibes un mensaje de confirmación, el webhook está correctamente configurado. Ahora, cada vez que subas cambios al repositorio, Jenkins iniciará automáticamente un nuevo proceso de construcción y despliegue.