gpt4 book ai didi

java - Git Hub Actions 使用 Maven 对其他存储库的私有(private)包注册表进行身份验证

转载 作者:行者123 更新时间:2023-12-01 23:34:01 25 4
gpt4 key购买 nike

项目设置如下:

  1. 项目 A(一些 Java 应用程序)
  2. 项目 B(一些 Java 库)

两者都是用maven构建的。项目 B 将其包发布到其自己存储库的 github 包注册表。项目 A 依赖于 pom.xml 中项目 B 的 Artifact ,看起来有点像这样:

<dependency>
<groupId>com.company</groupId>
<artifactId>library-project-b</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>

项目 A 还包括以下对项目 B 的包注册表的存储库引用:

<repository>
<id>github-library-project-b</id>
<name>Project B Github packages repositories</name>
<url>https://maven.pkg.github.com/organization/library-project-b</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>

为了对项目 B 的包注册表进行身份验证,项目 A 还包含一个 settings.xml,它具有通过 Github 操作的 secret 提供的环境变量设置的凭据:

<server>
<id>github-library-project-b</id>
<username>${env.USER_PACKAGE_READ}</username>
<password>${env.TOKEN_PACKAGE_READ}</password>
</server>

在 github 操作中的持续集成工作流中,我有以下步骤,它将项目 B 的注册表访问的存储库的 secret 映射到 settings.xml 中使用的环境变量,并通过 mvn 命令启动构建:

- name: Build Package
env:
USER_PACKAGE_READ: ${{ secrets.USER_PACKAGE_READ }}
TOKEN_PACKAGE_READ: ${{ secrets.TOKEN_PACKAGE_READ }}
run: mvn -B --settings settings.xml clean package --file pom.xml -DskipTests

正如我所读到的,我不能使用 GITHUB_TOKEN 访问另一个存储库的包注册表,因为 git hub 操作在其中运行,我已经在我的用户帐户上创建了一个个人访问 token 。 (具有 package_read 权限)


但无论我尝试什么 - 在构建阶段,我总是会在尝试下载 Artifact 的 maven 构建命令错误中遇到以下 401 错误:

Error:  Failed to execute goal on project PROjECT-A: Could not resolve dependencies for project com.company:ms-gp-events:jar:0.0.1-SNAPSHOT: Failed to collect dependencies at com.company:library-project-b:0.0.1-SNAPSHOT: Failed to read artifact descriptor for com.company:library-project-b:0.0.1-SNAPSHOT: Could not transfer artifact com.company:library-project-b:0.0.1-SNAPSHOT from/to github-library-project-b (https://maven.pkg.github.com/organization/library-project-b): Authentication failed for https://maven.pkg.github.com/company/library-project-b/com/company/library-project-b/0.0.1-SNAPSHOT/library-project-b-0.0.1-SNAPSHOT.pom 401 Unauthorized -> [Help 1]

有没有人使用 Maven 的 github 操作工作流的工作示例引用存储在来自另一个私有(private)存储库的 github 包注册表中的依赖项?我很困惑和沮丧,如此简单的事情却需要花费如此多的时间来设置。

最佳答案

我还是不是很确定,为什么我自己的settings.xml放在项目A的根目录下不起作用(可能是setup java步骤中缺少一些配置,但我不会做根本原因分析因为我没有无限的时间)。我通过使用 maven-settings-action 找到了解决方法作为 github 操作中的“正常”步骤:

 - uses: s4u/maven-settings-action@v2.3.0
with:
servers: |
[{
"id": "github-library-project-b",
"username": "${{ secrets.USER_PACKAGE_READ }}",
"password": "${{ secrets.TOKEN_PACKAGE_READ }}"
}]

操作步骤将在用户主目录中创建 settings.xml:

Prepare maven settings: /home/runner/.m2/settings.xml

此 settings.xml 最终将生效并允许针对项目 B 的包注册表进行验证。

关于java - Git Hub Actions 使用 Maven 对其他存储库的私有(private)包注册表进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65864411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com