本指南介绍如何创建将 Java 包发布到 GitHub Packages 和 Maven Central 仓库的工作流程。 通过单个工作流程,您可以将包发布到一个或多个仓库。
建议对工作流程文件和配置选项有一个基本了解。 更多信息请参阅“Learn GitHub Actions”。
有关使用 Gradle 为 Java 项目创建 CI 工作流程的详细信息,请参阅“使用 Gradle 构建和测试用 Java”。
您可能还发现基本了解以下内容是有帮助的:
build.gradle 文件 MavenPublication 部分的 groupId 和 artifactId 字段为包创建唯一标识符,供注册表用来将包链接到注册表。 这类似于 Maven pom.xml 文件的 groupId 和 artifactId 字段。 更多信息请参阅 Gradle 文档中的“Maven 发布插件”。
build.gradle 文件还包含 Gradle 将在其中部署包的分发管理仓库的配置。 每个仓库必须有名称、部署 URL 和验证凭据。
每次创建新版本时,都可以触发工作流程来发布包。 以下示例中的工作流程在类型为 created 的 release 事件触发时运行。 如果 CI 测试通过,工作流程将包发布到 Maven 中心仓库。 有关 release 事件的更多信息,请参阅“触发工作流程的事件”。
您可以在 build.gradle 文件的发布块中定义指向包仓库的新 Maven 仓库。 例如,如果您通过 OSSRH 托管项目部署到 Maven 中心仓库,则 build.gradle 可以指定名称为 "OSSRH" 的仓库。
groovypublishing {
...
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")
}
}
}
}
使用此配置可创建一个工作流程,以通过运行 gradle publish 命令将包发布到 Maven 中心仓库。 您还需要提供包含用户名和密码的环境变量向仓库验证。
在部署步骤中,您需要为用于向 Maven 仓库验证身份的用户名和密码或令牌设置环境变量。 更多信息请参阅“创建和使用加密密码”。
YAMLname: 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@v1
with:
java-version: 1.8
- name: Publish package
run: gradle publish
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
此工作流程执行以下步骤:
检出项目仓库的副本。
设置 Java JDK。
运行 gradle published 命令以发布到 OSSRH Maven 仓库。 MAVEN_USERNAME 环境变量将使用 OSSRH_USERNAME 密码的内容设置,而 MAVEN_PASSWORD 环境变量将使用 OSSRH_TOKEN 密码的内容设置。
有关在工作流程中使用密码的更多信息,请参阅“创建和使用加密密码”。
每次创建新版本时,都可以触发工作流程来发布包。 以下示例中的工作流程在类型为 created 的 release 事件触发时运行。 如果 CI 测试通过,工作流程会将包发布到 GitHub Packages。 有关 release 事件的更多信息,请参阅“触发工作流程的事件”。
您可以在 build.gradle 文件的发布块中定义指向 GitHub Packages 的新 Maven 仓库。 在仓库配置中,您也可以利用在 CI 工作流程运行中设置的环境变量。 您可以使用 GITHUB_ACTOR 环境变量作为用户名,并且可以使用 GITHUB_TOKENN 密码设置 GITHUB_TOKEN 环境变量。
GITHUB_TOKEN 默认存在于您的仓库中,并且对工作流程运行的仓库中的包具有读取和写入权限。 更多信息请参阅“使用 GITHUB_TOKEN 验证身份”。
例如,如果组织名为“octocat”且仓库名为“hello-world”,则 build.gradle 中的 GitHub Packages 配置看起来类似于以下示例。
groovypublishing {
...
repositories {
maven {
name = "GitHubPackages"
url = "https://maven.pkg.github.com/octocat/hello-world"
credentials {
username = System.getenv("GITHUB_ACTOR")
password = System.getenv("GITHUB_TOKEN")
}
}
}
}
使用此配置可创建一个工作流程,以通过运行 gradle publish 命令将包发布到 Maven 中心仓库。
YAMLname: Publish package to GitHub Packages
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Publish package
run: gradle publish
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
此工作流程执行以下步骤:
检出项目仓库的副本。
设置 Java JDK。
运行 gradle published 命令以发布到 GitHub Packages。 GITHUB_TOKEN 环境变量将使用 GITHUB_TOKEN 密码的内容设置。
有关在工作流程中使用密码的更多信息,请参阅“创建和使用加密密码”。
您可以通过在 build.gradle 文件中配置每项设置,将包发布到 Maven 中心仓库和 GitHub Packages。
确保 build.gradle 文件包含用于 GitHub 仓库和 Maven 中心仓库提供商的仓库。
例如,如果您通过 OSSRH 托管项目部署到 Maven 中心仓库,您可能想要在分发管理仓库中指定它,并将 name 设置为 OSSRH。 如果您部署到 GitHub Packages,您可能想要在分发管理仓库中指定它,并将 name 设置为 GitHubPackages。
如果组织名为“octocat”且仓库名为“hello-world”,则 build.gradle 中的 GitHub Packages 配置看起来类似于以下示例。
groovypublishing {
...
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")
}
}
}
}
使用此配置可创建一个工作流程,以通过运行 gradle publish 命令将包发布到 Maven 中心仓库和 GitHub Packages。
YAMLname: Publish package to the Maven Central Repository and GitHub Packages
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Java
uses: actions/setup-java@v1
with:
java-version: 1.8
- 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 }}
此工作流程执行以下步骤:
检出项目仓库的副本。
设置 Java JDK。
运行 gradle published 命令以发布到 OSSRH Maven 仓库和 GitHub Packages。 MAVEN_USERNAME 环境变量将使用 OSSRH_USERNAME 密码的内容设置,而 MAVEN_PASSWORD 环境变量将使用 OSSRH_TOKEN 密码的内容设置。 GITHUB_TOKEN 环境变量将使用 GITHUB_TOKEN 密码的内容设置。
有关在工作流程中使用密码的更多信息,请参阅“创建和使用加密密码”。