Bucle de Verificación Quarkus
Ejecutar antes de PRs, después de cambios importantes y antes del despliegue.
Cuándo Activar
- Antes de abrir un pull request para un servicio Quarkus
- Después de refactorizaciones importantes o actualizaciones de dependencias
- Verificación previa al despliegue para staging o producción
- Ejecutar el pipeline completo de build → lint → test → escaneo de seguridad → compilación nativa
- Validar que la cobertura de pruebas cumpla los umbrales (80%+)
- Probar compatibilidad con imagen nativa
Fase 1: Build
Si el build falla, detener y corregir errores de compilación.
Fase 2: Análisis Estático
Checkstyle, PMD, SpotBugs (Maven)
SonarQube (si está configurado)
Problemas Comunes a Resolver
- Importaciones o variables sin usar
- Métodos complejos (alta complejidad ciclomática)
- Posibles desreferencias de puntero nulo
- Problemas de seguridad detectados por SpotBugs
Fase 3: Pruebas + Cobertura
Categorías de Prueba
Pruebas Unitarias
Pruebas de Integración
Pruebas de API
Reporte de Cobertura
Verificar target/site/jacoco/index.html para cobertura detallada:
- Cobertura de líneas total (objetivo: 80%+)
- Cobertura de ramas (objetivo: 70%+)
- Identificar rutas críticas sin cobertura
Fase 4: Escaneo de Seguridad
Vulnerabilidades de Dependencias (Maven)
Revisar target/dependency-check-report.html para CVEs.
Auditoría de Seguridad Quarkus
OWASP ZAP (Pruebas de Seguridad de API)
Verificaciones de Seguridad Comunes
- Todos los secretos en variables de entorno (no en código)
- Validación de entrada en todos los endpoints
- Autenticación/autorización configurada
- CORS correctamente configurado
- Cabeceras de seguridad establecidas
- Contraseñas hasheadas con BCrypt
- Protección contra inyección SQL (consultas parametrizadas)
- Limitación de velocidad en endpoints públicos
Fase 5: Compilación Nativa
Probar compatibilidad de imagen nativa GraalVM:
Solución de Problemas de Imagen Nativa
Problemas comunes:
- Reflexión: Agregar config de reflexión para clases dinámicas
- Recursos: Incluir recursos con
quarkus.native.resources.includes - JNI: Registrar clases JNI si se usan bibliotecas nativas
Ejemplo de configuración de reflexión:
Fase 6: Pruebas de Rendimiento
Prueba de Carga con K6
Fase 7: Health Checks
Fase 8: Build de Imagen de Contenedor
Fase 9: Validación de Configuración
Verificaciones por Entorno
- URLs de base de datos configuradas por entorno
- Secretos externalizados (Vault, variables de entorno)
- Niveles de logging apropiados
- Orígenes CORS configurados correctamente
- Limitación de velocidad configurada
- Monitoreo/trazado habilitado
Fase 10: Revisión de Documentación
- Docs OpenAPI/Swagger actualizadas (
/q/swagger-ui) - README tiene instrucciones de configuración
- Cambios de API documentados
- Guía de migración para cambios disruptivos
Generar especificación OpenAPI:
Lista de Verificación
Calidad del Código
- El build pasa sin advertencias
- Análisis estático limpio (sin problemas altos/medios)
- El código sigue las convenciones del equipo
- Sin código comentado ni TODOs en el PR
Pruebas
- Todas las pruebas pasan
- Cobertura de código ≥ 80%
- Pruebas de integración con base de datos real
- Pruebas de seguridad pasan
- Rendimiento dentro de límites aceptables
Seguridad
- Sin vulnerabilidades en dependencias
- Autenticación/autorización probada
- Validación de entrada completa
- Secretos no en código fuente
- Cabeceras de seguridad configuradas
Despliegue
- Compilación nativa exitosa
- Imagen de contenedor construida
- Health checks responden correctamente
- Configuración válida para el entorno objetivo
Script de Verificación Automatizado
Buenas Prácticas
- Ejecutar el bucle de verificación antes de cada PR
- Automatizar en el pipeline CI/CD
- Corregir problemas inmediatamente; no acumular deuda técnica
- Mantener cobertura por encima del 80%
- Actualizar dependencias regularmente
- Probar compilación nativa periódicamente
- Monitorear tendencias de rendimiento
- Documentar cambios disruptivos

