注: GitHub Packages 目前正在测试用于 GitHub Enterprise Server 2.22。 要加入 您的 GitHub Enterprise Server 实例 的测试版,请使用注册表单。
注:安装或发布 Docker 映像时,GitHub Packages 当前不支持外部图层,如 Windows 映像。
向 GitHub Packages 验证
您需要访问令牌才能发布、安装和删除 GitHub Packages 中的包。
您可以使用个人访问令牌 (PAT) 向 GitHub Packages 或 GitHub API 验证。 创建个人访问令牌时,可根据需要为令牌分配不同的作用域。 有关 PAT 与包相关的域的更多信息,请参阅“关于 GitHub Packages 的权限”。
要在 GitHub Actions 工作流程内向 GitHub Packages 注册表验证,您可以使用:
GITHUB_TOKEN
来发布与工作流程仓库相关联的包。- PAT 来安装与其他私有仓库(
GITHUB_TOKEN
无法访问)相关联的包。
有关 GitHub Actions 工作流程中使用的 GITHUB_TOKEN
的更多信息,请参阅“工作流程中的身份验证”。 有关将 GITHUB_TOKEN
用于 Gradle 的更多信息,请参阅“使用 Gradle 发布 Java 包”。
使用个人访问令牌进行身份验证
您必须使用具有适当范围的个人访问令牌才可在 GitHub Packages 中发布和安装。 更多信息请参阅“关于 GitHub Packages”。
您可以使用 Gradle Groovy 或 Kotlin DSL,通过 Gradle 向 GitHub Packages 验证,方法是编辑 build.gradle 文件 (Gradle Groovy) 或 build.gradle.kts 文件 (Kotlin DSL) 以包含您的个人访问令牌。 您还可以配置 Gradle Groovy 和 Kotlin DSL 以识别仓库中的一个或多个包。
将 REGISTRY-URL 替换为您实例的 Maven 注册表的 URL。 如果您的实例启用了子域隔离,请使用 maven.HOSTNAME
。 如果您的实例禁用了子域隔离,请使用 HOSTNAME/_registry/maven
。 在任一情况下,都将 HOSTNAME 替换为 GitHub Enterprise Server 实例的主机名。
将 USERNAME 替换为您的 GitHub 用户名,将 TOKEN 替换为您的个人访问令牌,将 REPOSITORY 替换为要发布的包所在仓库的名称,将 OWNER 替换为 GitHub 上拥有该仓库的用户或组织帐户的名称。 由于不支持大写字母,因此,即使您的 GitHub 用户或组织名称中包含大写字母,也必须对仓库所有者使用小写字母。
注:GitHub Packages 支持 Apache Maven 的 SNAPSHOT
版本。 要使用 GitHub Packages 仓库下载 SNAPSHOT
工件,请在所用项目的 POM 或 ~/.m2/settings.xml 文件中启用 SNAPSHOTS。 关于示例,请参阅“配置 Apache Maven 用于 GitHub Packages”。
将 Gradle Groovy 用于一个仓库中单个包的示例
plugins {
id("maven-publish")
}
publishing {
repositories {
maven {
name = "GitHubPackages"
url = uri("https://REGISTRY-URL/OWNER/REPOSITORY")
credentials {
username = project.findProperty("gpr.user") ?: System.getenv("USERNAME")
password = project.findProperty("gpr.key") ?: System.getenv("TOKEN")
}
}
}
publications {
gpr(MavenPublication) {
from(components.java)
}
}
}
将 Gradle Groovy 用于同一个仓库中多个包的示例
plugins {
id("maven-publish") apply false
}
subprojects {
apply plugin: "maven-publish"
publishing {
repositories {
maven {
name = "GitHubPackages"
url = uri("https://REGISTRY-URL/OWNER/REPOSITORY")
credentials {
username = project.findProperty("gpr.user") ?: System.getenv("USERNAME")
password = project.findProperty("gpr.key") ?: System.getenv("TOKEN")
}
}
}
publications {
gpr(MavenPublication) {
from(components.java)
}
}
}
}
将 Kotlin DSL 用于同一个仓库中单个包的示例
plugins {
`maven-publish`
}
publishing {
repositories {
maven {
name = "GitHubPackages"
url = uri("https://REGISTRY-URL/OWNER/REPOSITORY")
credentials {
username = project.findProperty("gpr.user") as String? ?: System.getenv("USERNAME")
password = project.findProperty("gpr.key") as String? ?: System.getenv("TOKEN")
}
}
}
publications {
register<MavenPublication>("gpr") {
from(components["java"])
}
}
}
将 Kotlin DSL 用于同一个仓库中多个包的示例
plugins {
`maven-publish` apply false
}
subprojects {
apply(plugin = "maven-publish")
configure<PublishingExtension> {
repositories {
maven {
name = "GitHubPackages"
url = uri("https://REGISTRY-URL/OWNER/REPOSITORY")
credentials {
username = project.findProperty("gpr.user") as String? ?: System.getenv("USERNAME")
password = project.findProperty("gpr.key") as String? ?: System.getenv("TOKEN")
}
}
}
publications {
register<MavenPublication>("gpr") {
from(components["java"])
}
}
}
}
发布包
默认情况下,GitHub 将包发布到名称与包相同的现有仓库中。 例如,GitHub 将名为 com.example.test
的包发布到 OWNER/test
GitHub Packages 仓库中。
在发布包后,您可以在 GitHub 上查看该包。 更多信息请参阅“查看包”。
-
向 GitHub Packages 验证。 更多信息请参阅“向 GitHub Packages 验证”。
-
创建包后,您可以发布包。
$ gradle publish
Using a published package
To use a published package from GitHub Packages, add the package as a dependency and add the repository to your project. 更多信息请参阅 Gradle 文档中的“声明依赖项”。
-
向 GitHub Packages 验证。 更多信息请参阅“向 GitHub Packages 验证”。
-
将包依赖项添加到您的 build.gradle 文件 (Gradle Groovy) 或 build.gradle.kts 文件 (Kotlin DSL)。
使用 Gradle Groovy 的示例:
dependencies { implementation 'com.example:package' }
使用 Kotlin DSL 的示例:
dependencies { implementation("com.example:package") }
-
Add the repository to your build.gradle file (Gradle Groovy) or build.gradle.kts file (Kotlin DSL) file.
使用 Gradle Groovy 的示例:
repositories { maven { url = uri("https://REGISTRY-URL/OWNER/REPOSITORY") credentials { username = project.findProperty("gpr.user") ?: System.getenv("USERNAME") password = project.findProperty("gpr.key") ?: System.getenv("TOKEN") } } }
使用 Kotlin DSL 的示例:
repositories { maven { url = uri("https://REGISTRY-URL/OWNER/REPOSITORY") credentials { username = project.findProperty("gpr.user") as String? ?: System.getenv("USERNAME") password = project.findProperty("gpr.key") as String? ?: System.getenv("TOKEN") } } }