Git Hub Actions认证与maven到其他存储库的私有包注册表



项目设置如下:

  1. Project A (Some Java Application)
  2. Project B (Some Java Library)

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

<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 actions中的秘密提供的环境变量设置凭据:

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

在github操作的持续集成工作流中,我有以下步骤,将项目B的注册表访问的存储库中的秘密映射到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操作在其中运行,我已经在我的用户帐户上创建了一个个人访问令牌。(具有package_read权限)


但是无论我在构建阶段尝试什么,我总是以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]

有没有一个github动作工作流的工作示例,maven引用了一个依赖项,该依赖项存储在github包注册表中,来自另一个私有存储库?我很困惑和沮丧,这么简单的东西,要花这么多时间来设置。

我仍然不完全确定,为什么我自己的settings.xml放在项目A的根没有工作(可能在设置java步骤中缺少一些配置,但我不会在那里做根本原因分析,因为我没有无限的时间)。我找到了一种方法,将maven-settings-action设置为"normal"。github action:

- 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的包注册表进行身份验证。

最新更新