注: GitHub 托管的运行器目前在 GitHub Enterprise Server 上不受支持。 您可以在 GitHub 公共路线图 上查看有关未来支持计划的更多信息。
简介
本指南介绍如何创建将 Java 包发布到 GitHub Packages 和 Maven Central 仓库的工作流程。 通过单个工作流程,您可以将包发布到一个或多个仓库。
基本要求
建议对工作流程文件和配置选项有一个基本了解。 更多信息请参阅“Learn GitHub Actions”。
有关使用 Gradle 为 Java 项目创建 CI 工作流程的详细信息,请参阅“使用 Gradle 构建和测试用 Java”。
您可能还发现基本了解以下内容是有帮助的:
- “使用 npm 注册表”
- "环境变量"
- � 密的密� �"
- "工作流程中的身份验证"
关于包配置
build.gradle 文件 MavenPublication
部分的 groupId
和 artifactId
字段为包创建唯一� �识符,供注册表用来将包链接到注册表。 这类似于 Maven pom.xml 文件的 groupId
和 artifactId
字段。 更多信息请参阅 Gradle 文档中的“Maven 发布插件”。
build.gradle 文件还包含 Gradle 将在其中部署包的分发管理仓库的配置。 每个仓库必须有名称、部署 URL 和验证凭据。
将包发布到 Maven 中心仓库
每次创建新版本时,都可以触发工作流程来发布包。 以下示例中的工作流程在类型为 created
的 release
事件触发时运行。 如果 CI 测试通过,工作流程将包发布到 Maven 中心仓库。 有关 release
事件的更多信息,请参阅“触发工作流程的事件”。
您可以在 build.gradle 文件的发布块中定义指向包仓库的新 Maven 仓库。 例如,如果您通过 OSSRH 托管项目部署到 Maven 中心仓库,则 build.gradle 可以指定名称为 "OSSRH"
的仓库。
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")
}
}
}
}
使用此配置可创建一个工作流程,以通过运行 gradle publish
命令将包发布到 Maven 中心仓库。 在部署步骤中,您需要为用于向 Maven 仓库验证身份的用户名和密� �或令牌设置环境变量。 更多信息请参阅“创建和使用� 密密� �”。
# 此工作流使用未经 GitHub 认证的操作。
# 它们由第三方提供,并受
# 单独的服务条款、隐私政策和支持
# 文档管理。
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: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b
- name: Publish package
uses: gradle/gradle-build-action@0d13054264b0bb894ded474f08ebb30921341cee
with:
arguments: publish
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
此工作流程执行以下步骤:
-
检出项目仓库的副本。
-
设置 Java JDK。
-
验证仓库中存在的 Gradle Wrapper JAR 文件的� �验和。
-
运行具有
publish
参数的gradle/gradle-build-action
操作,以发布到OSSRH
Maven 存储库。MAVEN_USERNAME
环境变量将使用OSSRH_USERNAME
密� �的内容设置,而MAVEN_PASSWORD
环境变量将使用OSSRH_TOKEN
密� �的内容设置。有关在工作流程中使用密� �的更多信息,请参阅“创建和使用� 密密� �”。
发布包到 GitHub Packages
每次创建新版本时,都可以触发工作流程来发布包。 以下示例中的工作流程在类型为 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 配置看起来类似于以下示例。
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")
}
}
}
}
使用此配置可创建一个工作流程,以通过运行 gradle publish
命令将包发布到 GitHub Packages。
# 此工作流使用未经 GitHub 认证的操作。
# 它们由第三方提供,并受
# 单独的服务条款、隐私政策和支持
# 文档管理。
name: Publish package to GitHub Packages
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
- name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b
- name: Publish package
uses: gradle/gradle-build-action@0d13054264b0bb894ded474f08ebb30921341cee
with:
arguments: publish
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
此工作流程执行以下步骤:
-
检出项目仓库的副本。
-
设置 Java JDK。
-
验证仓库中存在的 Gradle Wrapper JAR 文件的� �验和。
-
运行具有
publish
参数的gradle/gradle-build-action
操作,以发布到 GitHub Packages。GITHUB_TOKEN
环境变量将使用GITHUB_TOKEN
密� �的内容设置。有关在工作流程中使用密� �的更多信息,请参阅“创建和使用� 密密� �”。
发布包到 Maven 中心仓库和 GitHub Packages
您可以通过在 build.gradle 文件中配置每项设置,将包发布到 Maven 中心仓库和 GitHub Packages。
确保 build.gradle 文件包含用于 GitHub 仓库和 Maven 中心仓库提供商的仓库。
例如,如果您通过 OSSRH 托管项目部署到 Maven 中心仓库,您可能想要在分发管理仓库中指定它,并将 name
设置为 OSSRH
。 如果您部署到 GitHub Packages,您可能想要在分发管理仓库中指定它,并将 name
设置为 GitHubPackages
。
如果组织名为“octocat”且仓库名为“hello-world”,则 build.gradle 中的配置看起来类似于以下示例。
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")
}
}
}
}
使用此配置可创建一个工作流程,以通过运行 gradle publish
命令将包发布到 Maven 中心仓库和 GitHub Packages。
# 此工作流使用未经 GitHub 认证的操作。
# 它们由第三方提供,并受
# 单独的服务条款、隐私政策和支持
# 文档管理。
name: 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@v2
with:
java-version: '11'
distribution: 'adopt'
- name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b
- name: Publish package
uses: gradle/gradle-build-action@0d13054264b0bb894ded474f08ebb30921341cee
with:
arguments: publish
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
此工作流程执行以下步骤:
-
检出项目仓库的副本。
-
设置 Java JDK。
-
验证仓库中存在的 Gradle Wrapper JAR 文件的� �验和。
-
运行具有
publish
参数的gradle/gradle-build-action
操作,以发布到OSSRH
Maven 存储库和 GitHub Packages。MAVEN_USERNAME
环境变量将使用OSSRH_USERNAME
密� �的内容设置,而MAVEN_PASSWORD
环境变量将使用OSSRH_TOKEN
密� �的内容设置。GITHUB_TOKEN
环境变量将使用GITHUB_TOKEN
密� �的内容设置。有关在工作流程中使用密� �的更多信息,请参阅“创建和使用� 密密� �”。