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 Maven, consultez « Génération et test de code Java avec Maven ».
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
dans le fichier pom.xml créent un identificateur unique pour votre package que les registres utilisent pour lier votre package à un registre. Pour plus d’informations, consultez Guide de chargement d’artefacts sur le dépôt central dans la documentation Apache Maven.
Le fichier pom.xml contient également la configuration des dépôts de gestion de distribution sur lesquels Maven va déployer des packages. Chaque dépôt doit avoir un nom et une URL de déploiement. L’authentification pour ces dépôts peut être configurée dans le fichier .m2/settings.xml dans le répertoire de base de l’utilisateur exécutant Maven.
Vous pouvez utiliser l’action setup-java
pour configurer le dépôt de déploiement ainsi que l’authentification pour ce dépôt. Pour plus d’informations, consultez setup-java
.
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 ».
Dans ce workflow, vous pouvez utiliser l’action setup-java
. Cette action installe la version donnée du JDK dans PATH
, mais elle configure également un fichier Maven settings.xml pour la publication de packages. Par défaut, le fichier de paramètres est configuré pour GitHub Packages, mais il peut être configuré pour le déploiement sur un autre registre de packages, tel que le dépôt central Maven. Si vous avez déjà un dépôt de gestion de distribution configuré dans pom.xml, vous pouvez spécifier cet id
pendant l’appel de l’action setup-java
.
Par exemple, si vous déployiez sur le dépôt central Maven via le projet d’hébergement OSSRH, votre pom.xml peut spécifier un dépôt de gestion de distribution avec l’id
ossrh
.
<project ...> ... <distributionManagement> <repository> <id>ossrh</id> <name>Central Repository OSSRH</name> <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url> </repository> </distributionManagement> </project>
<project ...>
...
<distributionManagement>
<repository>
<id>ossrh</id>
<name>Central Repository OSSRH</name>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
</project>
Avec cette configuration, vous pouvez créer un workflow qui publie votre package sur le dépôt central Maven en spécifiant l’id
de gestion de dépôt sur l’action setup-java
. Vous devez également fournir des variables d’environnement qui contiennent le nom d’utilisateur et le mot de passe pour vous authentifier auprès du dépôt.
À l’étape de déploiement, vous devez définir les variables d’environnement sur le nom d’utilisateur avec lequel vous vous authentifiez auprès du dépôt et sur un secret que vous avez configuré avec le mot de passe ou le jeton pour vous authentifier. Pour plus d’informations, consultez « Utilisation de secrets dans GitHub Actions ».
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 Maven Central Repository uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' server-id: ossrh server-username: MAVEN_USERNAME server-password: MAVEN_PASSWORD - name: Publish package run: mvn --batch-mode deploy env: MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
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 Maven Central Repository
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
server-id: ossrh
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
- name: Publish package
run: mvn --batch-mode deploy
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 et configure également le fichier Maven_settings.xml_ pour ajouter l’authentification pour le dépôt
ossrh
à l’aide des variables d’environnementMAVEN_USERNAME
etMAVEN_PASSWORD
. -
Exécute la commande
mvn --batch-mode deploy
pour effectuer une publication sur le dépôtossrh
. 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 ».
Dans ce workflow, vous pouvez utiliser l’action setup-java
. Cette action installe la version donnée du JDK dans PATH
et configure également un fichier Maven settings.xml pour la publication du package sur GitHub Packages. Le fichier settings.xml généré définit l’authentification pour un serveur avec l’id
github
, en utilisant la variable d’environnement GITHUB_ACTOR
comme nom d’utilisateur et la variable d’environnement GITHUB_TOKEN
comme mot de passe. La variable d’environnement GITHUB_TOKEN
se voit affecter la valeur du secret spécial 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 ».
Pour un projet Maven, vous pouvez utiliser ces paramètres en créant un dépôt de distribution dans votre fichier pom.xml avec l’id
github
qui pointe vers votre point de terminaison GitHub Packages.
Par exemple, si votre organisation est nommée « octocat » et que votre dépôt est nommé « hello-world », la configuration GitHub Packages dans pom.xml ressemblerait à l’exemple ci-dessous.
<project ...> ... <distributionManagement> <repository> <id>github</id> <name>GitHub Packages</name> <url>https://maven.pkg.github.com/octocat/hello-world</url> </repository> </distributionManagement> </project>
<project ...>
...
<distributionManagement>
<repository>
<id>github</id>
<name>GitHub Packages</name>
<url>https://maven.pkg.github.com/octocat/hello-world</url>
</repository>
</distributionManagement>
</project>
Avec cette configuration, vous pouvez créer un workflow qui publie votre package sur GitHub Packages en utilisant le fichier settings.xml généré automatiquement.
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: Publish package run: mvn --batch-mode deploy env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
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: Publish package
run: mvn --batch-mode deploy
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 et configure aussi automatiquement le fichier Maven settings.xml pour ajouter l’authentification pour le dépôt Maven
github
afin d’utiliser la variable d’environnementGITHUB_TOKEN
. -
Exécute la commande
mvn --batch-mode deploy
pour publier sur GitHub Packages. La variable d’environnementGITHUB_TOKEN
est définie avec le contenu du secretGITHUB_TOKEN
. La clépermissions
spécifie l’accès accordé auGITHUB_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 à l’aide de l’action setup-java
pour chaque registre.
Vérifiez que votre fichier pom.xml inclut un dépôt de gestion de distribution 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 l’id
défini sur ossrh
, et vous pouvez spécifier GitHub Packages dans un dépôt de gestion de distribution avec l’id
défini sur github
.
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 for publishing to Maven Central Repository uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' server-id: ossrh server-username: MAVEN_USERNAME server-password: MAVEN_PASSWORD - name: Publish to the Maven Central Repository run: mvn --batch-mode deploy env: MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} - name: Set up Java for publishing to GitHub Packages uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' - name: Publish to GitHub Packages run: mvn --batch-mode deploy env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
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 for publishing to Maven Central Repository
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
server-id: ossrh
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
- name: Publish to the Maven Central Repository
run: mvn --batch-mode deploy
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
- name: Set up Java for publishing to GitHub Packages
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: Publish to GitHub Packages
run: mvn --batch-mode deploy
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Ce workflow appelle l’action setup-java
deux fois. Chaque fois que l’action setup-java
s’exécute, elle remplace le fichier Maven settings.xml pour la publication de packages. Pour l’authentification auprès du dépôt, le fichier settings.xml fait référence au dépôt de gestion de distribution id
ainsi qu’aux nom d’utilisateur et mot de passe.
Ce workflow effectue les étapes suivantes :
-
Extrait une copie du dépôt du projet.
-
Appelle
setup-java
la première fois. Cela configure le fichier Maven settings.xml pour le dépôtossrh
et définit les options d’authentification sur les variables d’environnement définies à l’étape suivante. -
Exécute la commande
mvn --batch-mode deploy
pour effectuer une publication sur le dépôtossrh
. 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
. -
Appelle
setup-java
la deuxième fois. Cela configure automatiquement le fichier Maven settings.xml Maven pour GitHub Packages. -
Exécute la commande
mvn --batch-mode deploy
pour publier sur GitHub Packages. La variable d’environnementGITHUB_TOKEN
est définie avec le contenu du secretGITHUB_TOKEN
. La clépermissions
spécifie l’accès accordé auGITHUB_TOKEN
.Pour plus d’informations sur l’utilisation de secrets dans votre workflow, consultez « Utilisation de secrets dans GitHub Actions ».