Skip to main content
Nous publions des mises à jour fréquentes de notre documentation, et la traduction de cette page peut encore être en cours. Pour obtenir les informations les plus actuelles, consultez la documentation anglaise.

Génération et test de code Java avec Gradle

Vous pouvez créer un workflow d’intégration continue (CI) dans GitHub Actions pour générer et tester votre projet Java avec Gradle.

Introduction

Ce guide explique comment créer un workflow qui effectue une intégration continue (CI) pour votre projet Java à l’aide du système de génération Gradle. Le workflow que vous créez vous permet de voir à quel moment les commits de demande de tirage (pull request) entraînent des échecs de build ou de test dans votre branche par défaut. Cette approche peut vous aider à garantir l’intégrité de votre code. Vous pouvez étendre votre workflow CI pour mettre en cache des fichiers et charger des artefacts à partir d’une exécution de workflow.

Les exécuteurs hébergés dans GitHub ont un cache d’outils où des logiciels sont préinstallés, notamment les Java Development Kits (JDKs) et Gradle. Pour obtenir la liste des logiciels et des versions préinstallées de JDK et de Gradle, consultez « Spécifications pour les exécuteurs hébergés dans GitHub ».

Prérequis

Vous devez être familiarisé avec YAML et la syntaxe GitHub Actions. Pour plus d'informations, consultez les pages suivantes :

Il est recommandé d’avoir une compréhension de base de Java et du framework Gradle. Pour plus d’informations, consultez Getting Started dans la documentation Gradle.

Utilisation du workflow de démarrage Gradle

GitHub fournit un workflow de démarrage Gradle qui fonctionnera pour la plupart des projets Java basés sur Gradle. Pour plus d’informations, consultez Workflow de démarrage Gradle.

Pour commencer rapidement, vous pouvez choisir le workflow de démarrage Gradle préconfiguré lorsque vous créez un workflow. Pour plus d’informations, consultez le guide de démarrage rapide GitHub Actions.

Vous pouvez également ajouter ce workflow manuellement en créant un fichier dans le répertoire .github/workflows de votre dépôt.

YAML
# Ce workflow utilise des actions qui ne sont pas certifiées par GitHub.
# Elles sont fournies par un tiers et régies par
# des conditions d’utilisation du service, une politique de confidentialité et un support distincts.
# documentation en ligne.

# GitHub recommande d’épingler les actions à un SHA de commit.
# Pour obtenir une version plus récente, vous devez mettre à jour le SHA.
# Vous pouvez également référencer une balise ou une branche, mais l’action peut changer sans avertissement.

name: Java CI

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          java-version: '17'
          distribution: 'temurin'
      - name: Validate Gradle wrapper
        uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b
      - name: Build with Gradle
        uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
        with:
          arguments: build

Ce workflow effectue les étapes suivantes :

  1. L’étape checkout télécharge une copie de votre dépôt sur l’exécuteur.
  2. L’étape setup-java configure le JDK Eclipse Temurin (Java) 17 d’Eclipse Adoptium.
  3. L’étape « Validate Gradle wrapper » valide les sommes de contrôle des fichiers JAR Gradle Wrapper qui sont présents dans l’arborescence source.
  4. L’étape « Build with Gradle » crée une build à l’aide de l’action gradle/gradle-build-action fournie par Gradle dans GitHub. L’action s’occupe d’appeler Gradle, de collecter les résultats et de mettre en cache l’état entre les travaux. Pour plus d’informations, consultez gradle/gradle-build-action.

Les workflows de démarrage par défaut sont d’excellents points de départ lorsque vous créez votre workflow de build et de test. En outre, vous pouvez personnaliser le workflow de démarrage en fonction des besoins de votre projet.

Exécution sur un autre système d’exploitation

Le workflow de démarrage configure les travaux à exécuter sur Linux, à l’aide d’exécuteurs ubuntu-latest hébergés par GitHub. Vous pouvez modifier la clé runs-on pour exécuter vos travaux sur un autre système d’exploitation. Par exemple, vous pouvez utiliser des exécuteurs Windows hébergés par GitHub.

runs-on: windows-latest

Vous pouvez également exécuter sur les exécuteurs de données macOS hébergés par GitHub.

runs-on: macos-latest

Vous pouvez également exécuter des travaux dans des conteneurs Docker, ou vous pouvez fournir un exécuteur auto-hébergé qui s’exécute sur votre propre infrastructure. Pour plus d’informations, consultez « Syntaxe de workflow pour GitHub Actions ».

Spécification de la version et de l’architecture de JVM

Le workflow de démarrage configure le PATH pour contenir OpenJDK 8 pour la plateforme x64. Si vous souhaitez utiliser une autre version de Java ou cibler une architecture différente (x64 ou x86), vous pouvez utiliser l’action setup-java pour choisir un autre environnement d’exécution Java.

Par exemple, pour utiliser la version 11 du JDK fourni par Adoptium pour la plateforme x64, vous pouvez utiliser l’action setup-java et configurer les paramètres java-version, distribution et architecture sur '11', 'adopt' et x64.

YAML
steps:
  - uses: actions/checkout@v3
  - name: Set up JDK 11 for x64
    uses: actions/setup-java@v3
    with:
      java-version: '11'
      distribution: 'adopt'
      architecture: x64

Pour plus d’informations, consultez l’action setup-java.

Génération et test de votre code

Vous pouvez utiliser les mêmes commandes que celles que vous utilisez localement pour générer et tester votre code.

Le workflow de démarrage exécute la tâche build par défaut. Dans la configuration Gradle par défaut, cette commande télécharge les dépendances, génère les classes, exécute les tests et empaquettent les classes dans un format distribuable, par exemple, dans un fichier JAR.

Si vous utilisez différentes commandes pour générer votre projet ou si vous souhaitez utiliser une autre tâche, vous pouvez les spécifier. Par exemple, vous pouvez exécuter la tâche package qui est configurée dans votre fichier ci.gradle.

YAML
steps:
  - uses: actions/checkout@v3
  - uses: actions/setup-java@v3
    with:
      java-version: '17'
      distribution: 'temurin'
  - name: Validate Gradle wrapper
    uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b
  - name: Run the Gradle package task
    uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
    with:
      arguments: -b ci.gradle package

Mise en cache des dépendances

Vos dépendances de build peuvent être mises en cache pour accélérer vos exécutions de workflow. Après une exécution réussie, gradle/gradle-build-action met en cache d’importantes parties du répertoire de base de l’utilisateur Gradle. Dans les prochains travaux, le cache sera restauré pour que les scripts de build n’aient pas à être recompilés et que les dépendances ne doivent pas être téléchargées à partir de dépôts de package distants.

La mise en cache est activée par défaut lors de l’utilisation de l’action gradle/gradle-build-action. Pour plus d’informations, consultez gradle/gradle-build-action.

Empaquetage des données de workflow en tant qu’artefacts

Une fois que votre build a été générée et que vos tests ont réussi, vous pouvez charger les packages Java résultants en tant qu’artefacts de build. Cela stockera les packages générés dans le cadre de l’exécution du workflow et vous permettra de les télécharger. Les artefacts peuvent vous aider à tester et à déboguer des demandes de tirage dans votre environnement local avant qu’elles ne soient fusionnées. Pour plus d’informations, consultez « Rendre persistantes des données de workflow à l’aide d’artefacts ».

Gradle crée généralement des fichiers de sortie comme les fichiers JAR, EAR ou WAR dans le répertoire build/libs. Vous pouvez charger le contenu de ce répertoire à l’aide de l’action upload-artifact.

YAML
steps:
  - uses: actions/checkout@v3
  - uses: actions/setup-java@v3
    with:
      java-version: '17'
      distribution: 'temurin'
  - name: Validate Gradle wrapper
    uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b
  - name: Build with Gradle
    uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
    with:
      arguments: build
  - uses: actions/upload-artifact@v3
    with:
      name: Package
      path: build/libs