Hinweis: GitHub-gehostete Runner werden auf GitHub Enterprise Server derzeit nicht 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 Informationen zu GitHub Actions.
Weitere Informationen zum Erstellen eines CI-Workflows für dein Java-Projekt mit Maven findest du unter Java bauen und testen mit Maven.
Vielleicht findest Du es auch hilfreich, ein grundlegendes Verständnis von Folgendem zu haben:
- Arbeiten mit der npm-Registrierung
- Variablen
- Verwenden von Geheimnissen in GitHub-Aktionen
- Automatische Tokenauthentifizierung
Informationen zur Paketkonfiguration
Die Felder groupId
und artifactId
in der Datei pom.xml erstellen einen eindeutigen Bezeichner für dein Paket, der von Registrierungen zum Verknüpfen deines Pakets mit einer Registrierung verwendet wird. Weitere Informationen findest du im Leitfaden zum Hochladen von Artefakten in das zentrale Repository in der Apache Maven-Dokumentation.
Die Datei pom.xml enthält auch die Konfiguration für die Distributionsverwaltungsrepositorys, in denen Maven Pakete veröffentlicht. Jedes Repository braucht einen Namen und eine „Deployment-URL“ (Bereitstellungs-URL). Die Authentifizierung für diese Repositorys kann in der Datei .m2/settings.xml im Basisverzeichnis des Benutzers konfiguriert werden, der Maven ausführt.
Du kannst die Aktion setup-java
verwenden, um das Bereitstellungsrepository und die Authentifizierung für dieses Repository zu konfigurieren. Weitere Informationen findest du unter setup-java
.
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.
In diesem Workflow kannst du die setup-java
-Aktion verwenden. Diese Aktion installiert die angegebene Version des JDK in PATH
, aber konfiguriert auch eine Maven-Datei settings.xml für die Veröffentlichung von Paketen. Standardmäßig wird die Settings-Datei für GitHub Packages konfiguriert, aber sie kann dazu konfiguriert werden, in eine andere Paket-Registry wie z.B. das „Maven Central Repository“ zu deployen. Wenn du bereits ein Distributionsverwaltungsrepository in _pom.xml_konfiguriert hast, kannst du diese id
beim Aufruf der Aktion setup-java
angeben.
Wenn du die Bereitstellung für das Maven Central Repository beispielsweise über das OSSRH-Hostingprojekt durchgeführt hast, könnte deine Datei pom.xml ein Distributionsverwaltungsrepository mit der id
ossrh
angeben.
<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>
Mit dieser Konfiguration kannst du einen Workflow erstellen, der dein Paket im Maven Central Repository veröffentlicht, indem du die id
der Repositoryverwaltung in der setup-java
-Aktion angibst. Du musst auch Umgebungsvariablen bereitstellen, die den Benutzernamen und das Kennwort enthalten, um Dich im Repository zu authentifizieren.
Im Deploy-Schritt musst du die Umgebungsvariablen auf den Benutzernamen setzen, mit dem du Dich im Repository anmeldest, und auf ein Geheimnis, das du mit dem Passwort oder dem Token konfiguriert hast, mit dem du Dich authentifizierst. Weitere Informationen findest du unter Verwenden von Geheimnissen in GitHub-Aktionen.
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 }}
Dieser Workflow führt die folgenden Schritte aus:
-
Checkt eine Kopie des Projekt-Repositorys aus.
-
Richtet das Java JDK ein und konfiguriert auch die Maven-Datei settings.xml, um die Authentifizierung für das
ossrh
-Repository über die UmgebungsvariablenMAVEN_USERNAME
undMAVEN_PASSWORD
hinzuzufügen. -
Führt den Befehl
mvn --batch-mode deploy
aus, um das Repositoryossrh
veröffentlichen. Die UmgebungsvariableMAVEN_USERNAME
wird mit dem Inhalt IhresOSSRH_USERNAME
-Geheimnisses festgelegt, und die UmgebungsvariableMAVEN_PASSWORD
wird mit dem Inhalt IhresOSSRH_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.
In diesem Workflow kannst du die setup-java
-Aktion verwenden. Diese Aktion installiert die angegebene JDK-Version in PATH
und richtet zudem eine Maven-Datei settings.xml für die Veröffentlichung des Pakets in der GitHub Packages ein. Die generierte Datei settings.xml definiert die Authentifizierung für einen Server mit der id
github
, wobei die Umgebungsvariable GITHUB_ACTOR
als Benutzername und die Umgebungsvariable GITHUB_TOKEN
als Kennwort verwendet wird. Der Umgebungsvariablen GITHUB_TOKEN
wird der Wert des speziellen GITHUB_TOKEN
-Geheimnisses zugewiesen.
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 Lesezugriff auf den contents
-Bereich und Schreibzugriff auf den packages
-Bereich zu gewähren. Weitere Informationen findest du unter Automatische Tokenauthentifizierung.
Für ein Maven-basiertes Projekt kannst du diese Einstellungen verwenden, indem du in deiner Datei pom.xml ein Distributionsrepository mit der id
github
erstellst, das auf deinen GitHub Packages-Endpunkt verweist.
Wenn deine Organisation beispielsweise „octocat“ und dein Repository „hello-world“ heißen, sieht die GitHub Packages-Konfiguration in pom.xml ähnlich dem folgenden Beispiel aus.
<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>
Mit dieser Konfiguration kannst du einen Workflow erstellen, der dein Paket anhand der automatisch generierten Datei settings.xml in der GitHub Packages veröffentlicht.
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 }}
Dieser Workflow führt die folgenden Schritte aus:
-
Checkt eine Kopie des Projekt-Repositorys aus.
-
Richtet das Java JDK ein und konfiguriert auch automatisch die Maven-Datei settings.xml, um die Authentifizierung für das
github
-Maven-Repository über die UmgebungsvariableGITHUB_TOKEN
hinzuzufügen. -
Führt den Befehl
mvn --batch-mode deploy
aus, um die Veröffentlichung in GitHub Packages durchzuführen. Die UmgebungsvariableGITHUB_TOKEN
wird mit dem Inhalt desGITHUB_TOKEN
-Geheimnisses festgelegt. Der Schlüsselpermissions
gibt den Zugriff an, derGITHUB_TOKEN
gewährt wird.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 die Aktion setup-java
verwendest.
Stelle sicher, dass deine Datei pom.xml ein Distributionsverwaltungsrepository 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 durchführst, solltest du es in einem Distributionsverwaltungsrepository angeben, dessen id
auf ossrh
festgelegt ist. Außerdem solltest du GitHub Packages in einem Distributionsverwaltungsrepository angeben, dessen id
auf github
festgelegt ist.
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 }}
Dieser Workflow ruft die setup-java
-Aktion zweimal auf. Jedes Mal, wenn die setup-java
-Aktion ausgeführt wird, wird die Maven-Datei settings.xml für die Veröffentlichung von Paketen überschrieben. Bei der Authentifizierung beim Repository verweist die Datei settings.xml auf das Distributionsverwaltungsrepository id
sowie auf den Benutzernamen und das Kennwort.
Dieser Workflow führt die folgenden Schritte aus:
-
Checkt eine Kopie des Projekt-Repositorys aus.
-
Ruft
setup-java
zum ersten Mal auf. Dadurch wird die Maven-Datei settings.xml für dasossrh
-Repository konfiguriert, und die Authentifizierungsoptionen werden auf Umgebungsvariablen festgelegt, die im nächsten Schritt definiert werden. -
Führt den Befehl
mvn --batch-mode deploy
aus, um das Repositoryossrh
veröffentlichen. Die UmgebungsvariableMAVEN_USERNAME
wird mit dem Inhalt IhresOSSRH_USERNAME
-Geheimnisses festgelegt, und die UmgebungsvariableMAVEN_PASSWORD
wird mit dem Inhalt IhresOSSRH_TOKEN
-Geheimnisses festgelegt. -
Ruft
setup-java
zum zweiten Mal auf. Dadurch wird die Maven-Datei settings.xml automatisch für GitHub Packages konfiguriert. -
Führt den Befehl
mvn --batch-mode deploy
aus, um die Veröffentlichung in GitHub Packages durchzuführen. Die UmgebungsvariableGITHUB_TOKEN
wird mit dem Inhalt desGITHUB_TOKEN
-Geheimnisses festgelegt. Der Schlüsselpermissions
gibt den Zugriff an, derGITHUB_TOKEN
gewährt wird.Weitere Informationen zur Verwendung von Geheimnissen in deinem Workflow findest du unter Verwenden von Geheimnissen in GitHub-Aktionen.