Introduction : Pourquoi CI/CD est un must-have pour le développeur Java
Le développement Java moderne est impensable sans automatisation. Lancer manuellement les tests, compiler les fichiers .jar et déployer sur le serveur prend des heures et entraîne des erreurs humaines. CI/CD (Intégration Continue / Déploiement Continu) résout ce problème : chaque commit dans le dépôt est automatiquement vérifié, compilé et, si nécessaire, envoyé en production.
GitHub Actions est un outil intégré à GitHub qui permet de créer des pipelines directement dans le dépôt. Il est gratuit pour les projets publics, s'intègre facilement avec Maven/Gradle et prend en charge Java 8–21. Dans cet article, nous allons parcourir le cycle complet : du déclencheur sur push à la publication de l'artefact.
1. Bases de GitHub Actions : structure d'un workflow
Un workflow (processus de travail) est un fichier YAML situé dans .github/workflows/. Il se compose de :
- Déclencheurs (push, pull_request, schedule) ;
- Jobs (tâches) qui s'exécutent sur des machines virtuelles (runners) ;
- Steps (étapes) à l'intérieur de chaque tâche.
Pour un projet Java, un workflow typique comprend l'installation du JDK, l'exécution des tests Maven/Gradle et la compilation de l'artefact.
1.1. Premier workflow : tester un projet Java
Créez le fichier .github/workflows/ci.yml avec le contenu suivant :
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 testQue se passe-t-il ici :
actions/checkout— clone le dépôt ;setup-java— installe JDK 17 (Temurin) et met en cache les dépendances Maven ;mvn package— compile le projet et exécute les tests ;mvn test— exécution explicite des tests (peut être combiné avec package).
Après un push sur main, vous verrez une coche verte à côté du commit — cela signifie que le pipeline s'est déroulé avec succès.
2. Configuration avancée pour Java : matrice de versions et mise en cache
Les projets réels nécessitent souvent une vérification sur plusieurs versions de Java. GitHub Actions prend en charge la stratégie de matrice (matrix strategy).
2.1. Matrice 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 testCette approche garantit que votre code est compatible avec les versions LTS de Java. Les tâches s'exécutent en parallèle, ce qui fait gagner du temps.
2.2. Mise en cache des dépendances
Nous avons déjà spécifié cache: maven — cela met automatiquement en cache ~/.m2/repository. Pour Gradle, utilisez cache: gradle. Le cache accélère la compilation de 2 à 3 fois.
3. Compilation et publication des artefacts (JAR/Docker)
Après des tests réussis, il faut obtenir un artefact prêt. Examinons deux scénarios courants.
3.1. Téléchargement du fichier JAR dans les artefacts GitHub
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: