GitHub软件包:用于GitHub组织的单个Maven存储库

时间:2020-07-22 19:01:03

标签: maven github github-actions package-management github-package-registry

我想使用GitHub程序包在GitHub组织中存储多个存储库的Maven工件。 Currently,对于每个项目,似乎需要一个单独的(Maven)存储库配置条目来指向该(GitHub)存储库的Maven存储库:

<repository>
  <id>github</id>
  <name>GitHub OWNER Apache Maven Packages</name>
  <url>https://maven.pkg.github.com/OWNER/REPOSITORY</url>
</repository>

将要发布的Maven项目的相应配置是:

<distributionManagement>
   <repository>
     <id>github</id>
     <name>GitHub OWNER Apache Maven Packages</name>
     <url>https://maven.pkg.github.com/OWNER/REPOSITORY</url>
   </repository>
</distributionManagement>

是否可以将所有程序包都配置到单个存储库中?将REPOSITORY设置为组织中其他现有或不存在的(GitHub)存储库会使构建失败,就像完全删除/ REPOSITORY一样

2 个答案:

答案 0 :(得分:1)

个人访问令牌

secrets.GITHUB_TOKEN 是默认定义的,但它仅足以部署到当前存储库。

要使其跨存储库工作,您需要在以下位置定义新的个人访问令牌:

为范围选择 write:packages,系统会自动为您选择所有 repo 范围。

enter image description here

存储库/组织机密

接下来,在您的组织或您需要从中发布包的每个存储库中定义一个秘密。

为其命名(即 DEPLOY_GITHUB_TOKEN)并将其值设置为在上一步中创建的个人访问令牌。

enter image description here

存储库机密在存储库 Settings > Secrets 中定义。该组织也有类似的部分。

GitHub 操作

最后,确保将您的个人访问令牌作为名为 GITHUB_TOKEN 的环境变量传递给部署步骤。

在下面的示例中,它设置为上一步中定义的 DEPLOY_GITHUB_TOKEN 机密的值。

name: Build

on:
  release:
    types: [created]
jobs:
  build:
    name: Build & Deploy
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: Set up JDK 1.8
        uses: actions/setup-java@v1
        with:
          java-version: 1.8

      - name: Build with Maven
        run: mvn --batch-mode --update-snapshots install

      - name: Deploy to GitHub
        run: mvn --batch-mode -DskipTests -DuseGitHubPackages=true deploy
        env:
          GITHUB_TOKEN: ${{ secrets.DEPLOY_GITHUB_TOKEN }}

由于我使用专用的 Maven 配置文件进行 GitHub 包存储库分发管理,因此我也使用 -DuseGitHubPackages=true 激活了它。

Maven 个人资料

在下面的配置文件示例中,我将分发管理配置为使用外部/共享存储库 vlingo/vlingo-platform,就像@Danny Varod 的回答中所建议的那样。

<!-- pom.xml -->
<project>
  <!-- ... -->

  <profiles>
    <profile>
      <id>github</id>
      <activation>
        <property>
          <name>useGitHubPackages</name>
          <value>true</value>
        </property>
      </activation>
      <distributionManagement>
        <repository>
          <id>github</id>
          <name>GitHub Packages</name>
          <url>https://maven.pkg.github.com/vlingo/vlingo-platform</url>
        </repository>
      </distributionManagement>
    </profile>
  </profiles>
</project>

交叉发布于:https://dev.to/jakub_zalas/how-to-publish-maven-packages-to-a-single-github-repository-3lkc

可以在 vlingo 存储库中找到一个工作示例:https://github.com/vlingo/vlingo-platform/packages

答案 1 :(得分:0)

我不久前通过创建一个名为 maven-packages 或类似名称的空存储库并将所有 Maven 包从组织的所有存储库发布到这个存储库来解决这个问题。

这允许在本地、构建机器和部署环境中配置单个 Maven 存储库(除了 Maven-central),用于拉取 Maven 库依赖项。

我没有这个代码(在以前的工作场所,现在我使用 Python),但是,我记得使用 mvn deploy 命令行作为 documented here

mvn deploy:deploy-file -DpomFile=<path-to-pom> \
  -Dfile=<path-to-file> \
  -DrepositoryId=<id-to-map-on-server-section-of-settings.xml> \
  -Durl=<url-of-the-repository-to-deploy>

并且我在构建期间修改了 pom.xml 以插入正确的部署存储库的详细信息,因此发布只能通过构建完成(并将预发布详细信息添加到预发布的版本号)。这还允许为外部稳定版本添加额外的存储库(将发布到 Maven-central)。

查看配置 here