Introducción: Por qué CI/CD es Imprescindible para Desarrolladores Java
El desarrollo Java moderno es impensable sin automatización. Ejecutar pruebas manualmente, construir archivos .jar e implementar en un servidor lleva horas y provoca errores humanos. CI/CD (Integración Continua / Despliegue Continuo) resuelve este problema: cada commit en el repositorio se verifica, construye y, si es necesario, envía a producción automáticamente.
GitHub Actions es una herramienta integrada de GitHub que permite crear pipelines directamente en el repositorio. Es gratuita para proyectos públicos, se integra fácilmente con Maven/Gradle y es compatible con Java 8–21. En este artículo, cubriremos el ciclo completo: desde un trigger push hasta la publicación de un artifact.
1. Conceptos Básicos de GitHub Actions: Estructura del Workflow
Un workflow es un archivo YAML ubicado en .github/workflows/. Consiste en:
- Triggers (push, pull_request, schedule);
- Jobs que se ejecutan en máquinas virtuales (runners);
- Steps dentro de cada job.
Para un proyecto Java, un workflow típico incluye configurar el JDK, ejecutar pruebas con Maven/Gradle y construir el artifact.
1.1. Primer Workflow: Pruebas de un Proyecto Java
Cree un archivo .github/workflows/ci.yml con el siguiente contenido:
name: Java CI
on: push: branches: [ "main" ] pull_request: branches: [ "main" ]
jobs: build: runs-on: ubuntu-latest
steps: - uses: actions/checkout@v4 - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' cache: maven - name: Build with Maven run: mvn -B package --file pom.xml - name: Run tests run: mvn test¿Qué sucede aquí?:
actions/checkout— clona el repositorio;setup-java— instala JDK 17 (Temurin) y almacena en caché las dependencias de Maven;mvn package— construye el proyecto y ejecuta las pruebas;mvn test— ejecuta las pruebas explícitamente (se puede combinar con package).
Después de hacer push a main, verá una marca de verificación verde junto al commit — esto significa que el pipeline se ejecutó correctamente.
2. Configuración Avanzada para Java: Matriz de Versiones y Caché
Los proyectos reales a menudo requieren pruebas en múltiples versiones de Java. GitHub Actions admite una estrategia de matriz.
2.1. Matriz de JDK
jobs: test: runs-on: ubuntu-latest strategy: matrix: java: [11, 17, 21] steps: - uses: actions/checkout@v4 - name: Set up JDK ${{ matrix.java }} uses: actions/setup-java@v4 with: java-version: ${{ matrix.java }} distribution: 'temurin' cache: maven - run: mvn testEste enfoque garantiza que su código sea compatible con las versiones LTS de Java. Los trabajos se ejecutan en paralelo, ahorrando tiempo.
2.2. Caché de Dependencias
Ya especificamos cache: maven — esto almacena automáticamente en caché ~/.m2/repository. Para Gradle, use cache: gradle. El almacenamiento en caché acelera la compilación entre 2 y 3 veces.
3. Construcción y Publicación de Artifacts (JAR/Docker)
Después de las pruebas exitosas, necesita obtener un artifact listo. Veamos dos escenarios populares.
3.1. Subir un Archivo JAR a GitHub Artifacts
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' - run: mvn clean package - name: Upload JAR uses: actions/upload-artifact@v4 with: