CI/CD para Java: configuraciones avanzadas de GitHub Actions

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: de pipelines básicos a soluciones industriales



Un pipeline básico de CI/CD para un proyecto Java está bien. Pero en el desarrollo real, cuando el proyecto crece hasta tener decenas de módulos y el equipo está formado por varios desarrolladores, un simple `mvn clean test` deja de cumplir con los requisitos. Surgen preguntas: ¿cómo acelerar la compilación? ¿Cómo probar en diferentes versiones de JDK? ¿Cómo organizar la ejecución paralela de pruebas? ¿Cómo publicar artefactos automáticamente en Docker Hub?



En este artículo, analizaremos técnicas avanzadas de configuración de GitHub Actions para proyectos Java. Aprenderá cómo transformar su pipeline de una secuencia lineal de pasos a un potente sistema de integración y entrega continua, paralelo y optimizado.



1. Compilaciones matriciales: pruebas en múltiples JDK y SO



Una de las tareas clave de CI es garantizar que su código Java funcione en todas las plataformas compatibles. Ejecutar pruebas manualmente en Windows, macOS y Linux con diferentes versiones de JDK (11, 17, 21) es un lujo inaceptable. GitHub Actions ofrece una solución elegante: compilaciones matriciales (matrix builds).



Cómo funciona



Usted define una matriz de parámetros (versiones de JDK, sistemas operativos) y GitHub crea automáticamente un trabajo separado para cada combinación. Todos se ejecutan en paralelo.



Ejemplo de configuración



name: Java CI Matrixon: [push, pull_request]

jobs: build: runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] java: [11, 17, 21] exclude: - os: windows-latest java: 21 # Excluimos JDK 21 en Windows, si no es compatible fail-fast: false # No detener los demás trabajos si uno falla

steps: - uses: actions/checkout@v4 - name: Set up JDK ${{ matrix.java }} uses: actions/setup-java@v4 with: java-version: ${{ matrix.java }} distribution: 'temurin' - name: Build with Maven run: mvn -B clean verify --file pom.xml


Puntos clave:

  • strategy.matrix — define las combinaciones de parámetros.
  • exclude — permite excluir combinaciones que se sabe que no funcionan o son innecesarias.
  • fail-fast: false — si un trabajo falla, los demás continúan. Esto proporciona una imagen completa de la compatibilidad.


2. Almacenamiento en caché de dependencias: acelere la compilación 2-3 veces



Cada ejecución del pipeline comienza con un entorno limpio. Maven o Gradle descargan todas las dependencias de los repositorios nuevamente. Esto puede llevar de 3 a 5 minutos. El almacenamiento en caché resuelve este problema guardando la carpeta ~/.m2/repository (para Maven) o ~/.gradle/caches (para Gradle) entre ejecuciones.



GitHub Actions proporciona la acción integrada actions/cache. La clave de caché se forma basándose en el archivo de dependencias (pom.xml). Si el archivo no ha cambiado, la caché se restaura instantáneamente.



Ejemplo para Maven



steps:  - uses: actions/checkout@v4

- name: Cache Maven dependencies uses: actions/cache@v3 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} restore-keys: | ${{ runner.os }}-maven-

- name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin'

- name: Build with Maven run: mvn -B clean verify --file pom.xml


Importante: El almacenamiento en caché debe ir antes del paso de compilación. La clave hashFiles('**/pom.xml') garantiza que la caché solo se actualice cuando cambien las dependencias.



3. Ejecución paralela de pruebas y artefactos de compilación



Cuando su proyecto contiene cientos o miles de pruebas, y

Blogs

Book Recommendations