Este tutorial explica cómo configurar un entorno de integración continua utilizando Jenkins dentro de un contenedor Docker para automatizar el despliegue de aplicaciones Java. Se detallan los pasos desde la instalación del entorno hasta la ejecución del proyecto final.
Instalación de Docker
Para comenzar, se debe enstalar Docker Community Edition en el sistema operativo CentOS:
yum update
yum remove docker docker-common docker-selinux docker-engine
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce
systemctl start docker
systemctl enable docker
docker version
Configuración de Jenkins
Jenkins se ejecutará como un contenedor Docker. El siguiente comando crea y ejecuta una instancia de Jenkins:
docker run --name ci-server -u root --rm -d -p 8080:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean
Tras la ejecución, acceder a http://{ip-del-servidor}:8080 para completar la confiugración inicial. Es necesario obtener la contraseña administrativa desde el archivo:
docker exec -it ci-server bash
cat /var/lib/jenkins/secrets/initialAdminPassword
Personalización del entorno Jenkins
Desde el panel de administración, se deben instalar plugins adicionales:
- Maven Integration
- Publish Over SSH (opcional)
- Gitee (si se utiliza este servicio)
Además, se debe configurar Maven en la sección de configuración global.
Creación del pipeline
Crear un nuevo proyecto de tipo "free style". En la configuración:
- Especificar la ubicación del reopsitorio Git
- Agregar credenciales si es necesario
- Definir el paso de construcción usando Maven:
clean install -Dmaven.test.skip=true
Verificación del proceso
Ejecutar manualmente el job creado y revisar los logs de salida para confirmar que el artefacto .jar se genera correctamente. Los archivos resultantes estarán disponibles en:
/var/jenkins_home/workspace/{nombre-del-proyecto}
Despliegue automático
Para ejecutar la aplicación, se crea un Dockerfile en la raíz del proyecto Spring Boot:
FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY target/*.jar application.jar
EXPOSE 8888
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/application.jar","--spring.profiles.active=prd"]
Luego, se modifica la configuración del job en Jenkins añadiendo un script de shell:
cd $WORKSPACE
docker stop my-app-container || true
docker rm my-app-container || true
docker rmi my-app-image || true
docker build -t my-app-image .
docker run -d -p 8888:8888 --name my-app-container my-app-image
Este script asegura que las versiones anteriores se eliminen antes de construir e iniciar la nueva imagen. Finalmente, se puede verificar el estado del contenedor con:
docker ps
docker logs my-app-container