CI/CD para proyectos Java: 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: Automatización del desarrollo de Java con GitHub Actions

El desarrollo moderno de Java es impensable sin automatización. Las compilaciones, pruebas e implementaciones manuales no solo son una pérdida de tiempo, sino también una fuente de errores críticos. CI/CD (Continuous Integration / Continuous Deployment) resuelve este problema, convirtiendo las operaciones rutinarias en procesos automáticos. Una de las herramientas más populares para implementar CI/CD es GitHub Actions.

GitHub Actions está integrado directamente en GitHub, lo que lo convierte en la opción ideal para proyectos Java alojados en esta plataforma. Permite crear potentes pipelines que se ejecutan con cada push, pull request o según un horario. En este artículo, analizaremos cómo configurar un ciclo completo de CI/CD para una aplicación Java: desde la compilación y las pruebas hasta la implementación. Aprenderá a escribir configuraciones YAML efectivas, usar el almacenamiento en caché de dependencias e integrar herramientas populares como Maven y Gradle.



1. Fundamentos de GitHub Actions para Java: Workflow, Jobs y Steps

Antes de escribir código, es importante comprender la arquitectura de GitHub Actions. Cada pipeline se define en un archivo .github/workflows/*.yml. Los componentes principales son:

  • Workflow — es el pipeline en sí. Contiene uno o más jobs.
  • Jobs — bloques lógicos que se ejecutan en un mismo runner (máquina virtual). Los jobs pueden depender unos de otros.
  • Steps — comandos específicos dentro de un job: instalación de JDK, ejecución de Maven, publicación de artefactos.

Para proyectos Java, el paso clave es la configuración del Java Development Kit (JDK). GitHub Actions proporciona la acción predefinida actions/setup-java, que admite todas las distribuciones populares de JDK (Oracle, OpenJDK, Adoptium).

name: Java CI/CD Pipeline

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' - name: Build with Maven run: mvn clean install --file pom.xml

En este ejemplo, creamos un workflow básico que se ejecuta con cada push o pull request a la rama main. Utiliza Ubuntu, instala JDK 17 (distribución Temurin) y ejecuta la compilación con Maven. Este es el conjunto mínimo para Continuous Integration.



2. Compilación y pruebas: Maven, Gradle y almacenamiento en caché

La compilación es el corazón de CI/CD. Sin embargo, simplemente ejecutar mvn install no es suficiente. En proyectos grandes, la descarga de dependencias puede llevar minutos. Para acelerar el proceso, utilice el almacenamiento en caché. GitHub Actions permite almacenar en caché el directorio ~/.m2/repository (para Maven) o ~/.gradle/caches (para Gradle).

Aquí hay un ejemplo con almacenamiento en caché para Maven:

jobs:  build-and-test:    runs-on: ubuntu-latest    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 and run tests run: mvn clean verify --file pom.xml

- name: Upload test results if: always() uses: actions/upload-artifact@v4 with: name: test-results path: target/surefire-reports/

Observe la bandera if: always() en el paso de carga de los resultados de las pruebas. Garantiza que el artefacto

Blogs

Book Recommendations