Luk*_*ker 2 java github maven github-actions
项目设置如下:
两者都是用maven构建的。项目 B 将其包发布到其自己存储库的 github 包注册表中。项目 A 在 pom.xml 中依赖于项目 B 的工件,如下所示:
<dependency>
<groupId>com.company</groupId>
<artifactId>library-project-b</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
项目 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>
Run Code Online (Sandbox Code Playgroud)
为了对项目 B 的包注册表进行身份验证,项目 A 还包含一个 settings.xml,其中包含通过环境变量设置的凭据,这些环境变量是通过 Github 操作的机密提供的:
<server>
<id>github-library-project-b</id>
<username>${env.USER_PACKAGE_READ}</username>
<password>${env.TOKEN_PACKAGE_READ}</password>
</server>
Run Code Online (Sandbox Code Playgroud)
在 github actions 中的持续集成工作流程中,我执行以下步骤,将项目 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
Run Code Online (Sandbox Code Playgroud)
正如我所读到的,我无法使用 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]
Run Code Online (Sandbox Code Playgroud)
有没有人有一个使用 Maven 的 github 操作工作流程的工作示例,该工作流程引用了来自另一个私有存储库的 github 包注册表中存储的依赖项?我感到困惑和沮丧,如此简单的事情却需要花费如此多的时间来设置。
我仍然不确定,为什么我自己的 settings.xml 放置在项目 A 的根目录中不起作用(可能在设置 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 }}"
}]
Run Code Online (Sandbox Code Playgroud)
该操作步骤将在用户主目录中创建 settings.xml:
Prepare maven settings: /home/runner/.m2/settings.xml
Run Code Online (Sandbox Code Playgroud)
此 settings.xml 最终将生效并允许针对项目 B 的包注册表进行身份验证。
| 归档时间: |
|
| 查看次数: |
6114 次 |
| 最近记录: |