Introduction : Automatisation du développement Java avec GitHub Actions
Le développement Java moderne est impensable sans automatisation. Les builds, tests et déploiements manuels ne sont pas seulement une perte de temps, mais aussi une source d'erreurs critiques. CI/CD (Continuous Integration / Continuous Deployment) résout ce problème en transformant les opérations routinières en processus automatiques. L'un des outils les plus populaires pour implémenter le CI/CD est GitHub Actions.
GitHub Actions est intégré directement dans GitHub, ce qui en fait un choix idéal pour les projets Java hébergés sur cette plateforme. Il permet de créer des pipelines puissants qui se déclenchent à chaque push, pull request ou selon un planning. Dans cet article, nous allons voir comment configurer un cycle CI/CD complet pour une application Java : du build et des tests jusqu'au déploiement. Vous apprendrez à écrire des configurations YAML efficaces, à utiliser la mise en cache des dépendances et à intégrer des outils populaires comme Maven et Gradle.
1. Bases de GitHub Actions pour Java : Workflow, Jobs et Steps
Avant d'écrire du code, il est important de comprendre l'architecture de GitHub Actions. Chaque pipeline est défini dans un fichier .github/workflows/*.yml. Les composants principaux sont :
- Workflow — c'est le pipeline lui-même. Il contient un ou plusieurs jobs.
- Jobs — des blocs logiques qui s'exécutent sur un seul runner (machine virtuelle). Les jobs peuvent dépendre les uns des autres.
- Steps — les commandes spécifiques à l'intérieur d'un job : installation du JDK, lancement de Maven, publication des artefacts.
Pour les projets Java, l'étape clé est la configuration du Java Development Kit (JDK). GitHub Actions fournit une action prête à l'emploi actions/setup-java qui prend en charge toutes les distributions JDK populaires (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.xmlDans cet exemple, nous avons créé un workflow de base qui se déclenche lors d'un push ou d'une pull request sur la branche main. Il utilise Ubuntu, installe JDK 17 (distribution Temurin) et exécute un build Maven. C'est l'ensemble minimal pour l'Intégration Continue.
2. Build et tests : Maven, Gradle et mise en cache
Le build est le cœur du CI/CD. Cependant, simplement exécuter mvn install ne suffit pas. Dans les grands projets, le téléchargement des dépendances peut prendre des minutes. Pour accélérer le processus, utilisez la mise en cache. GitHub Actions permet de mettre en cache le répertoire ~/.m2/repository (pour Maven) ou ~/.gradle/caches (pour Gradle).
Voici un exemple avec mise en cache pour 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/Notez le drapeau if: always() dans l'étape de téléchargement des résultats de test. Il garantit que l'artefact