Remarque : Les exécuteurs hébergés sur GitHub ne sont pas pris en charge sur GitHub Enterprise Server. Vous pouvez voir plus d’informations sur le support futur planifié dans la GitHub public roadmap.
Introduction
Ce guide vous montre comment créer un workflow qui publie des packages Java sur GitHub Packages et le dépôt central Maven. Avec un seul workflow, vous pouvez publier des packages sur un dépôt unique ou sur plusieurs dépôts.
Prérequis
Il est recommandé d’avoir une compréhension de base des fichiers de workflow et options de configuration. Pour plus d’informations, consultez « Écriture de workflows ».
Pour plus d’informations sur la création d’un workflow CI pour votre projet Java avec Gradle, consultez « Génération et test de code Java avec Gradle ».
Vous pouvez également trouver utile d’avoir une compréhension de base des éléments suivants :
- « Utilisation du registre Apache Maven »
- « Stocker des informations dans des variables »
- « Utilisation de secrets dans GitHub Actions »
- « Authentification par jeton automatique »
À propos de la configuration d’un package
Les champs groupId
et artifactId
de la section MavenPublication
du fichier build.gradle créent un identificateur unique pour votre package que les registres utilisent pour lier votre package à un registre. Ceci est similaire aux champs groupId
et artifactId
du fichier Maven pom.xml. Pour plus d’informations, consultez le « plug-in de publication Maven » dans la documentation Gradle.
Le fichier build.gradle contient également la configuration des dépôts de gestion de distribution sur lesquels Gradle va publier des packages. Chaque dépôt doit avoir un nom, une URL de déploiement et des informations d’identification pour l’authentification.
Publication de packages sur le dépôt central Maven
Chaque fois que vous créez une version, vous pouvez déclencher un workflow pour publier votre package. Le workflow de l’exemple ci-dessous s’exécute lorsque l’événement release
se déclenche avec le type created
. Le workflow publie le package sur le dépôt central Maven si les tests CI réussissent. Pour plus d’informations sur l’événement release
, consultez « Événements qui déclenchent des flux de travail ».
Vous pouvez définir un nouveau dépôt Maven dans le bloc de publication de votre fichier build.gradle qui pointe vers votre dépôt de packages. Par exemple, si vous déployiez sur le dépôt central Maven via le projet d’hébergement OSSRH, votre build.gradle peut spécifier un dépôt avec le nom "OSSRH"
.
plugins { ... id 'maven-publish' } publishing { ... repositories { maven { name = "OSSRH" url = "https://oss.sonatype.org/service/local/staging/deploy/maven2/" credentials { username = System.getenv("MAVEN_USERNAME") password = System.getenv("MAVEN_PASSWORD") } } } }
plugins {
...
id 'maven-publish'
}
publishing {
...
repositories {
maven {
name = "OSSRH"
url = "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
credentials {
username = System.getenv("MAVEN_USERNAME")
password = System.getenv("MAVEN_PASSWORD")
}
}
}
}
Avec cette configuration, vous pouvez créer un workflow qui publie votre package sur le dépôt central Maven en exécutant la commande gradle publish
. À l’étape de déploiement, vous devez définir des variables d’environnement pour le nom d’utilisateur et le mot de passe ou le jeton que vous utilisez pour vous authentifier auprès du dépôt Maven. Pour plus d’informations, consultez « Utilisation de secrets dans GitHub Actions ».
# 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: Publish package to the Maven Central Repository on: release: types: [created] jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Java uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' - name: Setup Gradle uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0 - name: Publish package run: ./gradlew publish env: MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
# 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: Publish package to the Maven Central Repository
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0
- name: Publish package
run: ./gradlew publish
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
Ce workflow effectue les étapes suivantes :
-
Extrait une copie du dépôt du projet.
-
Configure le JDK Java.
-
Configure l’environnement Gradle. L’action
gradle/actions/setup-gradle
effectue la mise en cache de l’état entre les exécutions de flux de travail et fournit un résumé détaillé de toutes les exécutions Gradle. -
Exécute la tâche Gradle
publish
pour publier dans le référentiel MavenOSSRH
. La variable d’environnementMAVEN_USERNAME
est définie avec le contenu de votre secretOSSRH_USERNAME
, et la variable d’environnementMAVEN_PASSWORD
est définie avec le contenu de votre secretOSSRH_TOKEN
.Pour plus d’informations sur l’utilisation de secrets dans votre workflow, consultez « Utilisation de secrets dans GitHub Actions ».
Publication de packages sur GitHub Packages
Chaque fois que vous créez une version, vous pouvez déclencher un workflow pour publier votre package. Le workflow de l’exemple ci-dessous s’exécute lorsque l’événement release
se déclenche avec le type created
. Le workflow publie le package sur GitHub Packages si les tests CI réussissent. Pour plus d’informations sur l’événement release
, consultez « Événements qui déclenchent des flux de travail ».
Vous pouvez définir un nouveau dépôt Maven dans le bloc de publication de votre fichier build.gradle qui pointe vers GitHub Packages. Dans cette configuration de dépôt, vous pouvez également tirer parti des variables d’environnement définies dans votre exécution de workflow CI. Vous pouvez utiliser la variable d’environnement GITHUB_ACTOR
comme nom d’utilisateur, et vous pouvez définir la variable d’environnement GITHUB_TOKEN
avec votre secret GITHUB_TOKEN
.
Le secret GITHUB_TOKEN
a la valeur d’un jeton d’accès pour le dépôt chaque fois qu’un travail d’un workflow démarre. Vous devez définir les autorisations de ce jeton d’accès dans le fichier de workflow afin d’octroyer l’accès en lecture pour l’autorisation contents
et l’accès en écriture pour l’autorisation packages
. Pour plus d’informations, consultez « Authentification par jeton automatique ».
Par exemple, si votre organisation est nommée « octocat » et que votre dépôt est nommé « hello-world », la configuration GitHub Packages dans build.gradle ressemblerait à l’exemple ci-dessous.
plugins { ... id 'maven-publish' } publishing { ... repositories { maven { name = "GitHubPackages" url = "https://maven.pkg.github.com/octocat/hello-world" credentials { username = System.getenv("GITHUB_ACTOR") password = System.getenv("GITHUB_TOKEN") } } } }
plugins {
...
id 'maven-publish'
}
publishing {
...
repositories {
maven {
name = "GitHubPackages"
url = "https://maven.pkg.github.com/octocat/hello-world"
credentials {
username = System.getenv("GITHUB_ACTOR")
password = System.getenv("GITHUB_TOKEN")
}
}
}
}
Avec cette configuration, vous pouvez créer un workflow qui publie votre package sur GitHub Packages en exécutant la commande gradle publish
.
# 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: Publish package to GitHub Packages on: release: types: [created] jobs: publish: runs-on: ubuntu-latest permissions: contents: read packages: write steps: - uses: actions/checkout@v4 - uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' - name: Setup Gradle uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0 - name: Publish package run: ./gradlew publish env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# 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: Publish package to GitHub Packages
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0
- name: Publish package
run: ./gradlew publish
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Ce workflow effectue les étapes suivantes :
-
Extrait une copie du dépôt du projet.
-
Configure le JDK Java.
-
Configure l’environnement Gradle. L’action
gradle/actions/setup-gradle
effectue la mise en cache de l’état entre les exécutions de flux de travail et fournit un résumé détaillé de toutes les exécutions Gradle. -
Exécute la tâche Gradle
publish
pour publier dans GitHub Packages. La variable d’environnementGITHUB_TOKEN
est définie avec le contenu du secretGITHUB_TOKEN
. La clépermissions
spécifie l’accès autorisé par le secretGITHUB_TOKEN
.Pour plus d’informations sur l’utilisation de secrets dans votre workflow, consultez « Utilisation de secrets dans GitHub Actions ».
Publication de packages sur le dépôt central Maven et GitHub Packages
Vous pouvez publier vos packages sur le dépôt central Maven et GitHub Packages en configurant chacun dans votre fichier build.gradle.
Vérifiez que votre fichier build.gradle inclut un dépôt pour le dépôt GitHub et le fournisseur du dépôt central Maven.
Par exemple, si vous effectuez un déploiement sur le dépôt central via le projet d’hébergement OSSRH, vous pouvez le spécifier dans un dépôt de gestion de distribution avec le name
défini sur OSSRH
. Si vous effectuez un déploiement sur GitHub Packages, vous pouvez le spécifier dans un dépôt de gestion de distribution avec le name
défini sur GitHubPackages
.
Si votre organisation est nommée « octocat » et que votre dépôt est nommé « hello-world », la configuration dans build.gradle ressemblerait à l’exemple ci-dessous.
plugins { ... id 'maven-publish' } publishing { ... repositories { maven { name = "OSSRH" url = "https://oss.sonatype.org/service/local/staging/deploy/maven2/" credentials { username = System.getenv("MAVEN_USERNAME") password = System.getenv("MAVEN_PASSWORD") } } maven { name = "GitHubPackages" url = "https://maven.pkg.github.com/octocat/hello-world" credentials { username = System.getenv("GITHUB_ACTOR") password = System.getenv("GITHUB_TOKEN") } } } }
plugins {
...
id 'maven-publish'
}
publishing {
...
repositories {
maven {
name = "OSSRH"
url = "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
credentials {
username = System.getenv("MAVEN_USERNAME")
password = System.getenv("MAVEN_PASSWORD")
}
}
maven {
name = "GitHubPackages"
url = "https://maven.pkg.github.com/octocat/hello-world"
credentials {
username = System.getenv("GITHUB_ACTOR")
password = System.getenv("GITHUB_TOKEN")
}
}
}
}
Avec cette configuration, vous pouvez créer un workflow qui publie votre package sur le dépôt central Maven et GitHub Packages en exécutant la commande gradle publish
.
# 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: Publish package to the Maven Central Repository and GitHub Packages on: release: types: [created] jobs: publish: runs-on: ubuntu-latest permissions: contents: read packages: write steps: - uses: actions/checkout@v4 - name: Set up Java uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' - name: Setup Gradle uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0 - name: Publish package run: ./gradlew publish env: MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# 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: Publish package to the Maven Central Repository and GitHub Packages
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0
- name: Publish package
run: ./gradlew publish
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Ce workflow effectue les étapes suivantes :
-
Extrait une copie du dépôt du projet.
-
Configure le JDK Java.
-
Configure l’environnement Gradle. L’action
gradle/actions/setup-gradle
effectue la mise en cache de l’état entre les exécutions de flux de travail et fournit un résumé détaillé de toutes les exécutions Gradle. -
Exécute la tâche Gradle
publish
pour publier dansle référentiel MavenOSSRH
et GitHub Packages. La variable d’environnementMAVEN_USERNAME
est définie avec le contenu de votre secretOSSRH_USERNAME
, et la variable d’environnementMAVEN_PASSWORD
est définie avec le contenu de votre secretOSSRH_TOKEN
. La variable d’environnementGITHUB_TOKEN
est définie avec le contenu du secretGITHUB_TOKEN
. La clépermissions
spécifie l’accès autorisé par le secretGITHUB_TOKEN
.Pour plus d’informations sur l’utilisation de secrets dans votre workflow, consultez « Utilisation de secrets dans GitHub Actions ».