Note
Auf GitHub gehostete Runner werden aktuell nicht auf GitHub Enterprise Server unterstützt. Weitere Informationen zur geplanten zukünftigen Unterstützung findest Du in der GitHub public roadmap.
Einführung
Diese Anleitung zeigt, wie Du einen Workflow erstellst, der Java-Pakete in das GitHub Packages und das Maven Central Repository veröffentlicht. Mit einem einzelnen Workflow kannst Du Pakete in ein einzelnes oder in mehrere Repositorys veröffentlichen.
Voraussetzungen
Wir empfehlen Dir, ein grundlegendes Verständnis von Workflow-Dateien und Konfigurationsoptionen zu haben. Weitere Informationen findest du unter Schreiben von Workflows.
Weitere Informationen zum Erstellen eines CI-Workflows für dein Java.js-Projekt mit Gradle findest du unter Java bauen und testen mit Gradle.
Vielleicht findest Du es auch hilfreich, ein grundlegendes Verständnis von Folgendem zu haben:
- Arbeiten mit der Apache Maven-Registrierung
- Speichern von Informationen in Variablen
- Verwenden von Geheimnissen in GitHub-Aktionen
- Automatische Tokenauthentifizierung
Informationen zur Paketkonfiguration
Die Felder groupId
und artifactId
in dem Abschnitt MavenPublication
der Datei build.gradle erstellen einen eindeutigen Bezeichner für dein Paket, der von Registrierungen zum Verknüpfen deines Pakets mit einer Registrierung verwendet wird. Dies ähnelt den Feldern groupId
und artifactId
der Maven-Datei pom.xml. Weitere Informationen findest du in der Gradle-Dokumentation unter Maven-Veröffentlichungs-Plug-In.
Die Datei build.gradle enthält auch die Konfiguration für die Distributionsverwaltungsrepositorys, in denen Gradle Pakete veröffentlicht. Jedes Repository braucht einen Namen, eine Deployment-URL und Anmeldeinformationen zur Authentifizierung.
Pakete im „Maven Central Repository“ veröffentlichen
Jedes Mal, wenn Du ein neues Release erstellst, kannst Du einen Workflow anstoßen, um Dein Paket zu veröffentlichen. Der Workflow im folgenden Beispiel wird ausgeführt, wenn das release
-Ereignis mit dem created
-Typ ausgelöst wird. Der Workflow veröffentlicht das Paket im „Maven Central Repository“, sofern es die CI-Tests besteht. Weitere Informationen zum release
-Ereignis findest du unter Ereignisse zum Auslösen von Workflows.
Du kannst ein neues Maven-Repository im Veröffentlichungsblock deiner Datei_build.gradle_ definieren, das auf dein Paketrepository verweist. Wenn du die Bereitstellung für das Maven Central Repository beispielsweise über das OSSRH-Hostingprojekt durchgeführt hast, könnte deine Datei build.gradle ein Repository mit dem Namen "OSSRH"
angeben.
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")
}
}
}
}
Mit dieser Konfiguration kannst du einen Workflow erstellen, der dein Paket im Maven Central Repository veröffentlicht, indem du den gradle publish
-Befehl ausführst. Im Deploy-Schritt musst du Umgebungsvariablen für den Benutzernamen und das Passwort oder für den Token festlegen, mit dem du Dich im Maven-Repository authentifizierst. Weitere Informationen findest du unter Verwenden von Geheimnissen in GitHub-Aktionen.
# Dieser Workflow verwendet Aktionen, die nicht von GitHub zertifiziert sind. # Sie werden von einem Drittanbieter bereitgestellt und unterliegen # separaten Nutzungsbedingungen, Datenschutzbestimmungen und Support # Onlinedokumentation. # GitHub empfiehlt, Aktionen an einen Commit-SHA anzuheften. # Um eine neuere Version zu erhalten, musst du den SHA aktualisieren. # Du kannst auch auf ein Tag oder einen Branch verweisen, aber die Aktion kann sich ohne Vorwarnung ändern. 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 }}
# Dieser Workflow verwendet Aktionen, die nicht von GitHub zertifiziert sind.
# Sie werden von einem Drittanbieter bereitgestellt und unterliegen
# separaten Nutzungsbedingungen, Datenschutzbestimmungen und Support
# Onlinedokumentation.
# GitHub empfiehlt, Aktionen an einen Commit-SHA anzuheften.
# Um eine neuere Version zu erhalten, musst du den SHA aktualisieren.
# Du kannst auch auf ein Tag oder einen Branch verweisen, aber die Aktion kann sich ohne Vorwarnung ändern.
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 }}
Dieser Workflow führt die folgenden Schritte aus:
-
Checkt eine Kopie des Projekt-Repositorys aus.
-
Richtet das Java JDK ein.
-
Richtet die Gradle-Umgebung ein. Die Aktion
gradle/actions/setup-gradle
übernimmt das Zwischenspeichern des Zustands zwischen Workflowausführungen und liefert eine detaillierte Zusammenfassung aller Gradle-Ausführungen. -
Führt die Gradle-Aufgabe
publish
zum Veröffentlichen imOSSRH
-Maven-Repository aus. Die UmgebungsvariableMAVEN_USERNAME
wird mit dem Inhalt deinesOSSRH_USERNAME
-Geheimnisses und die UmgebungsvariableMAVEN_PASSWORD
mit dem Inhalt deinesOSSRH_TOKEN
-Geheimnisses festgelegt.Weitere Informationen zur Verwendung von Geheimnissen in deinem Workflow findest du unter Verwenden von Geheimnissen in GitHub-Aktionen.
Pakete in der GitHub Packages veröffentlichen
Jedes Mal, wenn Du ein neues Release erstellst, kannst Du einen Workflow anstoßen, um Dein Paket zu veröffentlichen. Der Workflow im folgenden Beispiel wird ausgeführt, wenn das release
-Ereignis mit dem created
-Typ ausgelöst wird. Der Workflow veröffentlicht das Paket in GitHub Packages , wenn die CI-Tests bestanden wurden. Weitere Informationen zum release
-Ereignis findest du unter Ereignisse zum Auslösen von Workflows.
Du kannst ein neues Maven-Repository im Veröffentlichungsblock deiner Datei_build.gradle_ definieren, das auf GitHub Packages verweist. In dieser Repository-Konfiguration kannst du auch die in deinem CI-Workflow-Lauf eingestellten Umgebungsvariablen nutzen. Du kannst die Umgebungsvariable GITHUB_ACTOR
als Benutzername verwenden und die Umgebungsvariable GITHUB_TOKEN
mit deinem GITHUB_TOKEN
-Geheimnis festlegen.
Das GITHUB_TOKEN
-Geheimnis wird jedes Mal auf ein Zugriffstoken für das Repository festgelegt, wenn ein Auftrag in einem Workflow beginnt. Die Berechtigungen für dieses Zugriffstoken müssen in der Workflowdatei festgelegt werden, um den Lesezugriff auf die contents
-Berechtigung und Schreibzugriff auf die packages
-Berechtigung zu gewähren. Weitere Informationen findest du unter Automatische Tokenauthentifizierung.
Wenn deine Organisation beispielsweise „octocat“ und dein Repository „hello-world“ heißt, ähnelt die GitHub Packages-Konfiguration in build.gradle dem folgenden Beispiel.
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")
}
}
}
}
Mit dieser Konfiguration kannst du einen Workflow erstellen, der dein Paket in GitHub Packages veröffentlicht, indem du den gradle publish
-Befehl ausführst.
# Dieser Workflow verwendet Aktionen, die nicht von GitHub zertifiziert sind. # Sie werden von einem Drittanbieter bereitgestellt und unterliegen # separaten Nutzungsbedingungen, Datenschutzbestimmungen und Support # Onlinedokumentation. # GitHub empfiehlt, Aktionen an einen Commit-SHA anzuheften. # Um eine neuere Version zu erhalten, musst du den SHA aktualisieren. # Du kannst auch auf ein Tag oder einen Branch verweisen, aber die Aktion kann sich ohne Vorwarnung ändern. 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 }}
# Dieser Workflow verwendet Aktionen, die nicht von GitHub zertifiziert sind.
# Sie werden von einem Drittanbieter bereitgestellt und unterliegen
# separaten Nutzungsbedingungen, Datenschutzbestimmungen und Support
# Onlinedokumentation.
# GitHub empfiehlt, Aktionen an einen Commit-SHA anzuheften.
# Um eine neuere Version zu erhalten, musst du den SHA aktualisieren.
# Du kannst auch auf ein Tag oder einen Branch verweisen, aber die Aktion kann sich ohne Vorwarnung ändern.
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 }}
Dieser Workflow führt die folgenden Schritte aus:
-
Checkt eine Kopie des Projekt-Repositorys aus.
-
Richtet das Java JDK ein.
-
Richtet die Gradle-Umgebung ein. Die Aktion
gradle/actions/setup-gradle
übernimmt das Zwischenspeichern des Zustands zwischen Workflowausführungen und liefert eine detaillierte Zusammenfassung aller Gradle-Ausführungen. -
Führt die Gradle-Aufgabe
publish
zum Veröffentlichen in GitHub Packages aus. Die UmgebungsvariableGITHUB_TOKEN
wird mit dem Inhalt desGITHUB_TOKEN
-Geheimnisses festgelegt. Der Schlüsselpermissions
gibt den Zugriff an, den dasGITHUB_TOKEN
-Geheimnis erteilt.Weitere Informationen zur Verwendung von Geheimnissen in deinem Workflow findest du unter Verwenden von Geheimnissen in GitHub-Aktionen.
Pakete im Maven Central Repository und in der GitHub Packages veröffentlichen
Du kannst deine Pakete sowohl im Maven Central Repository als auch in der GitHub Packages veröffentlichen, indem du für jede Registrierung deine Datei build.gradle konfigurierst.
Stelle sicher, dass deine Datei build.gradle ein Repository sowohl für dein GitHub-Repository als auch für deinen Maven Central Repository-Anbieter enthält.
Wenn du die Bereitstellung für das Central Repository beispielsweise über das OSSRH-Hostingprojekt durchgeführt hast, möchtest du sie möglicherweise in einem Distributionsverwaltungsrepository festlegen, indem du für name``OSSRH
angibst. Wenn du GitHub Packages bereitstellst, möchtest du sie möglicherweise in einem Distributionsverwaltungsrepository mit name
festgelegt auf GitHubPackages
angeben.
Wenn deine Organisation beispielsweise „octocat“ und dein Repository „hello-world“ heißt, ähnelt die Konfiguration in build.gradle dem folgenden Beispiel.
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")
}
}
}
}
Mit dieser Konfiguration kannst du einen Workflow erstellen, der dein Paket in dem Maven Central Repository und in der GitHub Packages veröffentlicht, indem du den gradle publish
-Befehl ausführst.
# Dieser Workflow verwendet Aktionen, die nicht von GitHub zertifiziert sind. # Sie werden von einem Drittanbieter bereitgestellt und unterliegen # separaten Nutzungsbedingungen, Datenschutzbestimmungen und Support # Onlinedokumentation. # GitHub empfiehlt, Aktionen an einen Commit-SHA anzuheften. # Um eine neuere Version zu erhalten, musst du den SHA aktualisieren. # Du kannst auch auf ein Tag oder einen Branch verweisen, aber die Aktion kann sich ohne Vorwarnung ändern. 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 }}
# Dieser Workflow verwendet Aktionen, die nicht von GitHub zertifiziert sind.
# Sie werden von einem Drittanbieter bereitgestellt und unterliegen
# separaten Nutzungsbedingungen, Datenschutzbestimmungen und Support
# Onlinedokumentation.
# GitHub empfiehlt, Aktionen an einen Commit-SHA anzuheften.
# Um eine neuere Version zu erhalten, musst du den SHA aktualisieren.
# Du kannst auch auf ein Tag oder einen Branch verweisen, aber die Aktion kann sich ohne Vorwarnung ändern.
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 }}
Dieser Workflow führt die folgenden Schritte aus:
-
Checkt eine Kopie des Projekt-Repositorys aus.
-
Richtet das Java JDK ein.
-
Richtet die Gradle-Umgebung ein. Die Aktion
gradle/actions/setup-gradle
übernimmt das Zwischenspeichern des Zustands zwischen Workflowausführungen und liefert eine detaillierte Zusammenfassung aller Gradle-Ausführungen. -
Führt die Gradle-Aufgabe
publish
zum Veröffentlichen imOSSRH
-Maven-Repository und in GitHub Packages aus. Die UmgebungsvariableMAVEN_USERNAME
wird mit dem Inhalt deinesOSSRH_USERNAME
-Geheimnisses und die UmgebungsvariableMAVEN_PASSWORD
mit dem Inhalt deinesOSSRH_TOKEN
-Geheimnisses festgelegt. Die UmgebungsvariableGITHUB_TOKEN
wird mit dem Inhalt desGITHUB_TOKEN
-Geheimnisses festgelegt. Der Schlüsselpermissions
gibt den Zugriff an, den dasGITHUB_TOKEN
-Geheimnis erteilt.Weitere Informationen zur Verwendung von Geheimnissen in deinem Workflow findest du unter Verwenden von Geheimnissen in GitHub-Aktionen.