aaee_ra4_proy2/README.md
2026-03-18 17:55:31 +01:00

104 lines
2.8 KiB
Markdown

# 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 install` funciona 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/maven.yml`
```yaml
name: CI
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`?
1. **clean** → Elimina artefactos anteriores
2. **compile** → Compila el código fuente
3. **test** → Ejecuta los tests unitarios
4. **package** → Genera el `.jar` o `.war`
> Si algún test falla, GitHub Actions marcará el workflow como **Failed** ✗
---
## 5. Buenas prácticas
1. **Mantén el `pom.xml` limpio**: no sobreescribas versiones de dependencias gestionadas por Spring Boot.
2. **Evita dependencias del entorno local**: sin rutas absolutas ni servicios externos sin mock.
3. **Usa perfiles Maven** si necesitas configuraciones distintas para CI (p. ej., base de datos H2 para tests).
4. **Verifica la versión de Java**: el runner de GitHub Actions debe usar la misma que la configurada en el proyecto.
5. **Habilita la caché de Maven**: reduce significativamente el tiempo de build en cada ejecución.
---
Fuentes: [ChatGPT](https://chat.openai.com) + [Claude](https://claude.ai)