此版本的 GitHub Enterprise 已停止服务 2021-09-23. 即使针对重大安全问题,也不会发布补丁。 要获得更好的性能、改进的安全性和新功能,请升级到 GitHub Enterprise 的最新版本。 如需升级方面的帮助,请联系 GitHub Enterprise 支持

使用 Gradle 发布 Java 包

您可以使用 Gradle 将 Java 包发布到注册表,作为持续集成 (CI) 工作流程的一部分。

注:GitHub Enterprise Server 2.22 上的 GitHub Actions 支持是有限的公测版。 测试已结束。 GitHub Actions 现在一般可用于 GitHub Enterprise Server 3.0 或更新版本。 更多信息请参阅 GitHub Enterprise Server 3.0 发行说明


注: GitHub 托管的运行器目前在 GitHub Enterprise Server 上不受支持。 您可以在 GitHub 公共路线图 上查看有关未来支持计划的更多信息。

简介

本指南介绍如何创建将 Java 包发布到 GitHub Packages 和 Maven Central 仓库的工作流程。 通过单个工作流程,您可以将包发布到一个或多个仓库。

基本要求

建议对工作流程文件和配置选项有一个基本了解。 更多信息请参阅“Learn GitHub Actions”。

有关使用 Gradle 为 Java 项目创建 CI 工作流程的详细信息,请参阅“使用 Gradle 构建和测试用 Java”。

您可能还发现基本了解以下内容是有帮助的:

关于包配置

build.gradle 文件 MavenPublication 部分的 groupIdartifactId 字段为包创建唯一标识符,供注册表用来将包链接到注册表。 这类似于 Maven pom.xml 文件的 groupIdartifactId 字段。 更多信息请参阅 Gradle 文档中的“Maven 发布插件”。

build.gradle 文件还包含 Gradle 将在其中部署包的分发管理仓库的配置。 每个仓库必须有名称、部署 URL 和验证凭据。

将包发布到 Maven 中心仓库

每次创建新版本时,都可以触发工作流程来发布包。 以下示例中的工作流程在类型为 createdrelease 事件触发时运行。 如果 CI 测试通过,工作流程将包发布到 Maven 中心仓库。 有关 release 事件的更多信息,请参阅“触发工作流程的事件”。

您可以在 build.gradle 文件的发布块中定义指向包仓库的新 Maven 仓库。 例如,如果您通过 OSSRH 托管项目部署到 Maven 中心仓库,则 build.gradle 可以指定名称为 "OSSRH" 的仓库。

groovy
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 仓库验证身份的用户名和密码或令牌设置环境变量。 更多信息请参阅“创建和使用加密密码”。

YAML
# 此工作流使用未经 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
        run: gradle publish
        env:
          MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
          MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}

此工作流程执行以下步骤:

  1. 检出项目仓库的副本。

  2. 设置 Java JDK。

  3. 验证仓库中存在的 Gradle Wrapper JAR 文件的校验和。

  4. 运行 gradle published 命令以发布到 OSSRH Maven 仓库。 MAVEN_USERNAME 环境变量将使用 OSSRH_USERNAME 密码的内容设置,而 MAVEN_PASSWORD 环境变量将使用 OSSRH_TOKEN 密码的内容设置。

    有关在工作流程中使用密码的更多信息,请参阅“创建和使用加密密码”。

发布包到 GitHub Packages

每次创建新版本时,都可以触发工作流程来发布包。 以下示例中的工作流程在类型为 createdrelease 事件触发时运行。 如果 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 配置看起来类似于以下示例。

groovy
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")
      }
    }
  }
}

With this configuration, you can create a workflow that publishes your package to GitHub Packages by running the gradle publish command.

YAML
# 此工作流使用未经 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
        run: gradle publish
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

此工作流程执行以下步骤:

  1. 检出项目仓库的副本。

  2. 设置 Java JDK。

  3. 验证仓库中存在的 Gradle Wrapper JAR 文件的校验和。

  4. 运行 gradle published 命令以发布到 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

If your organization is named "octocat" and your repository is named "hello-world", then the configuration in build.gradle would look similar to the below example.

groovy
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。

YAML
# 此工作流使用未经 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
        run: gradle publish
        env: 
          MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
          MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

此工作流程执行以下步骤:

  1. 检出项目仓库的副本。

  2. 设置 Java JDK。

  3. 验证仓库中存在的 Gradle Wrapper JAR 文件的校验和。

  4. 运行 gradle published 命令以发布到 OSSRH Maven 仓库和 GitHub Packages。 MAVEN_USERNAME 环境变量将使用 OSSRH_USERNAME 密码的内容设置,而 MAVEN_PASSWORD 环境变量将使用 OSSRH_TOKEN 密码的内容设置。 GITHUB_TOKEN 环境变量将使用 GITHUB_TOKEN 密码的内容设置。

    有关在工作流程中使用密码的更多信息,请参阅“创建和使用加密密码”。