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

Iva*_* G. 5 github package-management maven github-actions github-package-registry

我想使用 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>
Run Code Online (Sandbox Code Playgroud)

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

<distributionManagement>
   <repository>
     <id>github</id>
     <name>GitHub OWNER Apache Maven Packages</name>
     <url>https://maven.pkg.github.com/OWNER/REPOSITORY</url>
   </repository>
</distributionManagement>
Run Code Online (Sandbox Code Playgroud)

有没有办法将软件包配置为全部转到单个 REPOSITORY?将 REPOSITORY 设置为组织中不同的现有或不存在 (GitHub) 存储库会导致构建失败,完全删除 /REPOSITORY 也是如此

Sol*_*ola 6

对于那些只是想避免<repository>多次指定标签的人:

显然,GitHub并不关心你从注册表中提取包时设置的存储库。拉取时,包索引基于组织级别,而不是存储库级别

如果您想从同一组织内的多个存储库中提取软件包,您可以这样做:

<repository>
  <id>github</id>
  <name>GitHub OWNER Apache Maven Packages</name>
  <url>https://maven.pkg.github.com/Your-Orgnazation/JUST-ENTER-ANYTHING-HERE</url>
</repository>
Run Code Online (Sandbox Code Playgroud)

注意:您仍然需要个人令牌才能跨存储库提取包。您不必<repository>多次指定标签。


Jak*_*las 5

个人访问令牌

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

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

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

在此输入图像描述

存储库/组织机密

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

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

在此输入图像描述

Settings存储库机密在repository >中定义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 }}
Run Code Online (Sandbox Code Playgroud)

由于我使用专用的 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>
Run Code Online (Sandbox Code Playgroud)

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

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


Dan*_*rod 1

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

这使得可以在本地、构建机器和部署环境中配置单个 Maven 存储库(除了 Maven 中心),以拉取 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>
Run Code Online (Sandbox Code Playgroud)

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

请参阅此处的配置。