|
|
||
|---|---|---|
| .github/workflows | ||
| .settings | ||
| src | ||
| .classpath | ||
| .gitignore | ||
| .project | ||
| pom.xml | ||
| README.md | ||
CI/CD con Maven y GitHub Actions
1. Estructura del proyecto Maven
Un proyecto Maven bien organizado es la base para que el pipeline de CI funcione sin problemas:
proyecto/
├── src/
│ ├── main/java/ # Código de producción
│ └── test/java/ # Tests unitarios
└── pom.xml # Dependencias, plugins y versión de Java
Regla clave: Si
mvn clean installfunciona en local → debe funcionar en CI.
2. Dependencias y plugins esenciales
Testing
spring-boot-starter-test(proyectos Spring Boot): incluye JUnit 5, AssertJ y Mockito.
Plugins Maven importantes
| Plugin | Función |
|---|---|
maven-compiler-plugin |
Compila el proyecto |
maven-surefire-plugin |
Ejecuta tests unitarios |
maven-failsafe-plugin |
Ejecuta tests de integración (opcional) |
3. Tests
Buenas prácticas para que los tests pasen en un entorno limpio de CI:
- Deben ejecutarse sin depender del IDE.
- Evitar dependencias de rutas locales o bases de datos externas → usar H2 en memoria si es necesario.
- Nombres descriptivos con un único escenario por test:
metodo_cuandoCondicion_retornaResultado
4. Flujo básico con GitHub Actions
Archivo de configuración: .github/workflows/ci-mvn.yml
name: CI con Maven
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK
uses: actions/setup-java@v3
with:
java-version: '23'
distribution: 'temurin'
- name: Cache Maven packages
uses: actions/cache@v3
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- name: Build with Maven
run: mvn clean install
¿Qué hace mvn clean install?
- clean → Elimina artefactos anteriores
- compile → Compila el código fuente
- test → Ejecuta los tests unitarios
- package → Genera el
.jaro.war
Si algún test falla, GitHub Actions marcará el workflow como Failed ✗
5. Buenas prácticas
- Mantén el
pom.xmllimpio: no sobreescribas versiones de dependencias gestionadas por Spring Boot. - Evita dependencias del entorno local: sin rutas absolutas ni servicios externos sin mock.
- Usa perfiles Maven si necesitas configuraciones distintas para CI (p. ej., base de datos H2 para tests).
- Verifica la versión de Java: el runner de GitHub Actions debe usar la misma que la configurada en el proyecto.
- Habilita la caché de Maven: reduce significativamente el tiempo de build en cada ejecución.