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

使用 Maven 发布 Java 包

您可以使用 Maven 将 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”。

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

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

关于包配置

pom.xml 文件中的 groupIdartifactId 字段为包创建唯一标识符,供注册表用来将包链接到注册表。 更多信息请参阅 Apache Maven 文档中的将构件上传到中心仓库的指南

pom.xml 文件还包含 Maven 将在其中部署包的分配管理仓库的配置。 每个仓库都必须有名称和部署 URL。 这些仓库的身份验证可在运行 Maven 的用户主目录下的 .m2/settings.xml 文件中配置。

您可以使用 setup-java 操作配置部署仓库以及该仓库的身份验证。 更多信息请参阅 setup-java

将包发布到 Maven 中心仓库

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

在此工作流程中,您可以使用 setup-java 操作。 此操作将 JDK 的给定版本安装到 PATH,但同时会配置 Maven settings.xml 以发布包。 默认情况下,设置文件将配置用于 GitHub Packages,但可以将其配置为部署到另一个包注册表,如 Maven 中心仓库。 如果您已经在 pom.xml 配置分配管理仓库,则可在 setup-java 操作调用期间指定该 id

例如,如果您通过 OSSRH 托管项目部署到 Maven 中心仓库,则 pom.xml 可以指定 idossrh 的分发管理仓库。

xml
<project ...>
  ...
  <distributionManagement>
    <repository>
      <id>ossrh</id>
      <name>Central Repository OSSRH</name>
      <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
    </repository>
  </distributionManagement>
</project>

使用此配置,可通过将仓库管理 id 指定到 setup-java 操作,创建一个将包发布到 Maven 中心仓库的工作流程。 您还需要提供包含用户名和密码的环境变量向仓库验证。

在部署步骤中,您需要将环境变量设置为向仓库验证的用户名,以及用密码或令牌配置为进行身份验证的密钥。 更多信息请参阅“创建和使用加密密码”。

YAML
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 Maven Central Repository
        uses: actions/setup-java@v2
        with:
          java-version: '11'
          distribution: 'adopt'
          server-id: ossrh
          server-username: MAVEN_USERNAME
          server-password: MAVEN_PASSWORD
      - name: Publish package
        run: mvn --batch-mode deploy
        env:
          MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
          MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}

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

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

  2. 设置 Java JDK,同时使用 MAVEN_USERNAMEMAVEN_PASSWORD 环境变量配置 Maven settings.xml 文件为 ossrh 仓库添加身份验证。

  3. 运行 mvn --batch-mode deploy 命令以发布到 ossrh 仓库。 MAVEN_USERNAME 环境变量将使用 OSSRH_USERNAME 密码的内容设置,而 MAVEN_PASSWORD 环境变量将使用 OSSRH_TOKEN 密码的内容设置。

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

发布包到 GitHub Packages

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

在此工作流程中,您可以使用 setup-java 操作。 此操作将给定版本的 JDK 安装到 PATH,并且设置 Maven settings.xml 以将包发布到 GitHub Packages。 生成的 settings.xml 定义使用 githubid 向服务器验证,使用 GITHUB_ACTOR 环境变量作为用户名,GITHUB_TOKEN 环境变量作为密码。 GITHUB_TOKEN 环境变量将获分配特殊 GITHUB_TOKEN 密钥的值。

每当工作流程中的作业开始时,都会将 GITHUB_TOKEN 密钥设置为仓库的访问令牌。 它对工作流程运行的仓库中的包具有读取和写入权限。 更多信息请参阅“使用 GITHUB_TOKEN 验证身份”。

对于基于 Maven的项目,您可以通过在 pom.xml 文件中创建分发仓库来使用这些设置,该文件以 githubid 指向 GitHub Packages 端点。

例如,如果组织名为“octocat”且仓库名为“hello-world”,则 pom.xml 中的 GitHub Packages 配置看起来类似于以下示例。

xml
<project ...>
  ...
  <distributionManagement>
    <repository>
      <id>github</id>
      <name>GitHub Packages</name>
      <url>https://maven.pkg.github.com/octocat/hello-world</url>
    </repository>
  </distributionManagement>
</project>

通过此配置,您可以创建一个工作流程,以使用自动生成的 settings.xml 将包发布到 GitHub Packages。

YAML
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: Publish package
        run: mvn --batch-mode deploy
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

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

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

  2. 设置 Java JDK,同时自动配置 Maven settings.xml 文件为 github Maven 仓库添加身份验证,以使用 GITHUB_TOKEN 环境变量。

  3. 运行 mvn --batch-mode deploy 命令以发布到 GitHub Packages。 GITHUB_TOKEN 环境变量将使用 GITHUB_TOKEN 密码的内容设置。

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

发布包到 Maven 中心仓库和 GitHub Packages

您可以使用每个注册表的 setup-node 操作将包发布到 Maven 中心仓库和 GitHub Packages。

确保 pom.xml 文件包含用于 GitHub 仓库和 Maven 中心仓库提供商的分发管理仓库。 例如,如果您通过 OSSRH 托管项目部署到中心仓库,您可能想通过将 id 设置为 ossrh 在分发管理仓库中指定它,并且想通过将 id 设置为 github 在分发管理仓库中指定 GitHub Packages。

YAML
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 for publishing to Maven Central Repository
        uses: actions/setup-java@v2
        with:
          java-version: '11'
          distribution: 'adopt'
          server-id: ossrh
          server-username: MAVEN_USERNAME
          server-password: MAVEN_PASSWORD
      - name: Publish to the Maven Central Repository
        run: mvn --batch-mode deploy
        env:
          MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
          MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
      - name: Set up Java for publishing to GitHub Packages
        uses: actions/setup-java@v2
        with:
          java-version: '11'
          distribution: 'adopt'
      - name: Publish to GitHub Packages
        run: mvn --batch-mode deploy
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

此工作流程将调用 setup-java 操作两次。 每次运行 setup-java 操作时,都会覆盖 Maven settings.xml 文件以发布包。 为向仓库验证,settings.xml 文件引用分发管理仓库 id 以及用户名和密码。

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

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

  2. 第一次调用 setup-java。 这将为 ossrh 仓库配置 Maven settings.xml 文件,并将身份验证选项设置为下一步定义的环境变量。

  3. 运行 mvn --batch-mode deploy 命令以发布到 ossrh 仓库。 MAVEN_USERNAME 环境变量将使用 OSSRH_USERNAME 密码的内容设置,而 MAVEN_PASSWORD 环境变量将使用 OSSRH_TOKEN 密码的内容设置。

  4. 第二次调用 setup-java。 这将自动为 GitHub Packages 配置 Maven settings.xml 文件。

  5. 运行 mvn --batch-mode deploy 命令以发布到 GitHub Packages。 GITHUB_TOKEN 环境变量将使用 GITHUB_TOKEN 密码的内容设置。

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