En esta lección aprenderemos:
- Crear y configurar un pipeline en GitLab CI para una aplicación Spring Boot.
- Implementar las etapas de build, test y deploy.
- Entender cómo monitorizar la ejecución del pipeline y arreglar errores.
Así que, ¡prepárate! Configurar un pipeline de CI/CD es como reinstalar el sistema operativo: no apetece hacerlo, pero después todo funciona (al menos, debería).
Por qué necesitamos configurar un pipeline de CI/CD
Cada vez que los desarrolladores añaden nuevo código, nuestro proceso de build, test y despliegue debe ejecutarse automáticamente. Esto acelera mucho el desarrollo y minimiza el factor humano (es decir, menos "errores accidentales").
Escenario real
Imagina que tu equipo desarrolla una aplicación Spring Boot. Cada commit al repositorio lanza un pipeline que:
- Comprueba que el proyecto se compila.
- Ejecuta todos los tests automáticos.
- Despliega la aplicación en un entorno de prueba y/o staging.
- Al final, pone la aplicación verificada en production.
Si el pipeline falla, GitLab te mostrará claramente dónde ocurrió el error. Eso es lo que vamos a configurar.
Construcción del pipeline: etapas principales
Empecemos creando el archivo .gitlab-ci.yml en la raíz de nuestro proyecto. Ese es el "corazón" del pipeline de GitLab CI, donde describimos todas las etapas.
stages: # Definimos las etapas de nuestro pipeline
- build
- test
- deploy
Aquí indicamos las etapas principales:
build: compilación del proyecto.test: testing (unit y/o integration tests).deploy: despliegue en entorno staging o production.
La etapa "build" se encarga de compilar nuestra aplicación. Para Spring Boot usaremos Maven.
build:
stage: build
image: maven:3.8.5-openjdk-17 # Imagen Docker con Maven y Java 17
script:
- mvn clean package -DskipTests
artifacts:
paths:
- target/*.jar # Guardamos el artefacto JAR compilado
only:
- main # Ejecutamos esta etapa solo en la rama main
Repasemos los puntos clave:
image: indicamos la imagen Docker donde se ejecutará esta etapa (aquí Maven + JDK 17).script: comandos a ejecutar. Llamamos amvn clean packagepara compilar el proyecto.artifacts: guardamos los artefactos resultantes (en este caso los JAR).only: ejecutamos esta etapa solo en la rama "main", para no construir cada rama de prueba.
Ahora añadimos el testing. Esta etapa es importante para asegurarnos de que el nuevo código no rompe la funcionalidad existente.
test:
stage: test
image: maven:3.8.5-openjdk-17
script:
- mvn test # Ejecutamos todos los tests
only:
- merge_requests # Ejecutamos tests para merge requests
Qué hace esta etapa:
- Usa la misma imagen Docker que la de build.
- Se ejecuta el comando
mvn test, que valida nuestro código. - Está configurado para ejecutarse en merge requests, ya que el sentido principal del testing es revisar el código antes de mergearlo en la rama principal.
La etapa de deploy se encarga del despliegue de la aplicación. Para empezar configuraremos el deploy en un entorno staging.
deploy:
stage: deploy
image: docker:20.10.16 # Usamos Docker para el despliegue
services:
- docker:dind # Docker-in-Docker para trabajar con contenedores
script:
- docker build -t my-spring-app:latest .
- docker run -d -p 8080:8080 my-spring-app:latest
only:
- main # El despliegue se ejecuta solo desde la rama main
Desgranando los detalles:
imageyservices: usamos Docker para el despliegue.script: construimos la imagen Docker de nuestra aplicación y lanzamos el contenedor.only: el deploy se hace solo desde la rama principal (main).
Ejemplo completo del pipeline
Así es como queda el archivo .gitlab-ci.yml completo con todas las etapas:
stages:
- build
- test
- deploy
build:
stage: build
image: maven:3.8.5-openjdk-17
script:
- mvn clean package -DskipTests
artifacts:
paths:
- target/*.jar
only:
- main
test:
stage: test
image: maven:3.8.5-openjdk-17
script:
- mvn test
only:
- merge_requests
deploy:
stage: deploy
image: docker:20.10.16
services:
- docker:dind
script:
- docker build -t my-spring-app:latest .
- docker run -d -p 8080:8080 my-spring-app:latest
only:
- main
Ahora tenemos un pipeline funcionando que, por etapas:
- Compila la aplicación (
build). - Ejecuta los unit tests (
test). - Despliega la aplicación compilada en un contenedor (
deploy).
Cómo seguir el pipeline
Después de un commit en GitLab:
- Abre la pestaña CI/CD → Pipelines.
- Verás la lista de pipelines lanzados y su estado (success, failed, running, etc.).
- Si algo va mal, puedes clicar en la etapa concreta y ver los logs de ejecución.
Errores típicos y cómo solucionarlos
- Error: "Docker daemon not available"
Asegúrate de haber añadidodocker:dinden la secciónservices. - Error de build "Unable to find dependency"
Revisa el archivopom.xml— puede que una dependencia esté mal indicada o que no haya acceso a los repositorios Maven. - Los tests fallan en la etapa "test"
Siempre revisa tus tests localmente antes de pushearlos al repositorio.
Ahora estás listo para automatizar la compilación, testing y despliegue de tu aplicación Spring Boot usando GitLab CI. Y no te asusten los errores. Son inevitables, pero se pueden vencer.
GO TO FULL VERSION