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.
Vorrausetzungen
Wir empfehlen Dir, ein grundlegendes Verständnis von Workflow-Dateien und Konfigurationsoptionen zu haben. For more information, see "Learn GitHub Actions."
Weitere Informationen zum Erstellen eines CI-Workflows für Dein Java-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:
- "Working with the npm registry"
- "Environment variables"
- "Encrypted secrets"
- "Authentication in a workflow"
Informationen zur Paketkonfiguration
Die Felder groupId und artifactId im Abschnitt MavenPublication der Datei build.gradle bilden eine eindeutige Kennung für Dein Paket. Registries verwenden diese Kennung, um Dein Paket mit einer Registry zu verknüpfen. Dies ist so ähnlich wie bei den Feldern groupId und artifactId der Maven-Datei pom.xml. Weitere Informationen findest Du unter „‚Maven Publish Plugin‘“ in der Gradle-Dokumentation.
Die Datei build.gradle enthält auch die Konfiguration für die Distributionsverwaltungs-Repositories, zu denen Gradle dann 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 von dem Ereignis release vom Typ created angestoßen. Der Workflow veröffentlicht das Paket im „Maven Central Repository“, sofern es die CI-Tests besteht. Weitere Informationen zum Ereignis release findest Du unter „Ereignisse, die Workflows anstoßen“.
Du kannst ein neues Maven-Repository im Block publishing Deiner Datei build.gradle definieren, das auf Dein Paket-Repository verweist. Wenn Du zum Beispiel über das OSSRH-Hosting-Projekt in das „Maven Central Repository“ deployst, kann Deine build.gradle ein Repository mit dem Namen "OSSRH" bestimmen.
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 mithilfe des Befehls gradle publish Dein Paket im „Maven Central Repository“ veröffentlicht. Du musst auch Umgebungsvariablen bereitstellen, die den Benutzernamen und das Kennwort enthalten, um Dich im Repository zu authentifizieren.
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 "Verschlüsselte Geheimnisse erstellen und verwenden".
name: Publish package to the Maven Central Repository
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Java
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
- name: Publish package
run: gradle 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.
-
Führt den Befehl
gradle publishaus, um im Maven-RepositoryOSSRHzu veröffentlichen. Die UmgebungsvariableMAVEN_USERNAMEwird mit dem Inhalt Deines GeheimnissesOSSRH_USERNAMEgefüllt, und die UmgebungsvariableMAVEN_PASSWORDwird mit dem Inhalt Deines GeheimnissesOSSRH_TOKENgefüllt.Weitere Informationen zur Verwendung von Geheimnissen in Deinem Workflow findest Du unter „Verschlüsselte Geheimnisse erstellen und verwenden“.
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 von dem Ereignis release vom Typ created angestoßen. Der Workflow veröffentlicht das Paket in GitHub Packages , wenn die CI-Tests bestanden wurden. Weitere Informationen zum Ereignis release findest Du unter „Ereignisse, die Workflows anstoßen“.
Du kannst ein neues Maven-Repository im Block publishing 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 Benutzernamen verwenden und die Umgebungsvariable GITHUB_TOKEN auf Dein GITHUB_TOKEN-Geheimnis setzen.
The GITHUB_TOKEN secret is set to an access token for the repository each time a job in a workflow begins. You should set the permissions for this access token in the workflow file to grant read access for the contents scope and write access for the packages scope. For more information, see "Authenticating with the GITHUB_TOKEN."
Wenn beispielsweise Deine Organisation „octocat“ und Dein Repository „hello-world“ heißt, sieht die GitHub Packages-Konfiguration in build.gradle so ähnlich wie im folgenden Beispiel aus.
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 mithilfe des Befehls gradle publish Dein Paket im „Maven Central Repository“ 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@v2
- uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
- name: Publish package
run: gradle 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.
-
Führt den Befehl
gradle publishaus, um in GitHub Packages zu veröffentlichen. Die UmgebungsvariableGITHUB_TOKENwird mit dem Inhalt desGITHUB_TOKEN-Geheimnisses gefüllt. Thepermissionskey specifies the access that theGITHUB_TOKENsecret will allow.Weitere Informationen zur Verwendung von Geheimnissen in Deinem Workflow findest Du unter „Verschlüsselte Geheimnisse erstellen und verwenden“.
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 beides in Deiner Datei build.gradle konfigurierst.
Stelle sicher, dass Deine Datei build.gradle ein Repository sowohl für Dein GitHub-Repository als auch Deinen „Maven Central Repository“-Provider enthält.
Wenn Du beispielsweise über das OSSRH-Hosting-Projekt in das Central Repository deployen willst, kannst Du das in einem Distributionsverwaltungs-Repository angeben, wobei Du den -name auf OSSRH setzt. Wenn Du in die GitHub Packages deployen willst, kannst Du das in einem Distributionsverwaltungs-Repository angeben, wobei Du den -name auf GitHubPackages setzt.
Wenn Deine Organisation „octocat“ und Dein Repository „hello-world“ heißt, sieht die GitHub Packages-Konfiguration in build.gradle so ähnlich wie im folgenden Beispiel aus.
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 mithilfe des Befehls gradle publish Dein Paket sowohl im „Maven Central Repository“ als auch in der GitHub Packages veröffentlicht.
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@v2
- name: Set up Java
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
- name: Publish to the Maven Central Repository
run: gradle 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.
-
Führt den Befehl
gradle publishaus, um im Maven-RepositoryOSSRHund in der GitHub Packages zu veröffentlichen. Die UmgebungsvariableMAVEN_USERNAMEwird mit dem Inhalt Deines GeheimnissesOSSRH_USERNAMEgefüllt, und die UmgebungsvariableMAVEN_PASSWORDwird mit dem Inhalt Deines GeheimnissesOSSRH_TOKENgefüllt. Die UmgebungsvariableGITHUB_TOKENwird mit dem Inhalt desGITHUB_TOKEN-Geheimnisses gefüllt. Thepermissionskey specifies the access that theGITHUB_TOKENsecret will allow.Weitere Informationen zur Verwendung von Geheimnissen in Deinem Workflow findest Du unter „Verschlüsselte Geheimnisse erstellen und verwenden“.