7

我想使用 GitHub 包为 GitHub 组织中的多个存储库存储 Maven 工件。目前,对于每个项目,似乎都需要一个单独的(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 也是如此

4

2 回答 2

2

个人访问令牌

secrets.GITHUB_TOKEN默认情况下定义,但仅足以部署到当前存储库。

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

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

在此处输入图像描述

存储库/组织机密

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

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

在此处输入图像描述

存储库机密在存储库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 }}

由于我为 GitHub 包存储库分发管理使用了专用的 Maven 配置文件,因此我还使用-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

于 2021-02-08T10:56:11.987 回答
0

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

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

我没有此代码(在以前的工作场所,现在我使用 Python),但是,我记得为此使用了mvn deploy命令行,如此所述:

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

请参阅此处的配置。

于 2021-01-28T15:30:51.497 回答