当前位置: 首页 > 知识库问答 >
问题:

Git Hub Actions使用maven对其他存储库的私有包注册表进行身份验证

叶德运
2023-03-14

项目设置如下:

  1. 项目A(部分Java申请)
  2. 项目B(某Java图书馆)

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

<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还包括设置。通过Github操作的机密提供的环境变量设置凭据的xml:

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

在github actions中的持续集成工作流中,我有以下步骤,该步骤将项目B的注册表访问存储库中的机密映射到设置中使用的环境变量。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_令牌访问另一个存储库的包注册表,因为GITHUB操作在其中运行,我已经在我的用户帐户上创建了一个个人访问令牌。(具有软件包读取权限)

但是无论我尝试什么-在构建阶段,我总是会在maven build命令错误下载工件时出现以下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操作工作流的工作示例,该工作流引用了从另一个私有存储库存储在github包注册表中的依赖项?我感到困惑和沮丧的是,这么简单的事情,需要这么多时间来设置。

共有1个答案

督德泽
2023-03-14

我仍然不完全确定,为什么我自己的settings.xml放在项目A的根中不起作用(也许在设置java步骤中缺少一些配置,但我不会做根原因分析,因为我没有无限时间量)。我找到了一种方法,在github操作中使用maven-setation-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 }}"
            }]

操作步骤将创建设置。用户主目录中的xml:

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

这是一个设置。xml最终将生效,并允许针对项目B的包注册表进行身份验证。

 类似资料:
  • 我在用户X和存储库名称Y下有一个私有存储库: https://github.com/X/Y 这是一个用Gradle构建的Java项目。 Gradle配置文件已按照官方Github软件包注册表文档中的说明进行配置,我能够成功发布我的软件包: https://help.github.com/en/articles/configuring-gradle-for-use-with-github-packa

  • 我一直在寻找使用各种AWS服务来处理我们下一个主要项目的基础设施。我们开始研究EC2实例上的docker容器,但在进一步研究AWS Lambda之后,这似乎是一条值得探索的道路。 使用AWS Lambda范例,我们只需使用Lambda函数作为逻辑粘合剂,将数据和事件(来自其他AWS服务)保存在一起。 例如,如果我们产品的用户创建了一个新记录,AWS Lambda可以在该事件中触发,我们可以调用La

  • 我尝试将安装程序部署到本地存储库: --设置。xml-- --波姆。xml--- 当我执行“mvn部署”时,我收到错误: 艺术家日志: 如果我将服务器/存储库id更改为“myserver.com”-部署工作!但这不适合我,因为在myserver上,这不适用于svn。通用域名格式 我试图将标签“配置文件”和“镜像”添加到server.xml和“分发管理”添加到pom.xml-得到相同的错误 服务器/

  • 我正在尝试创建一个应用程序,我必须注册用户,我正在使用Firebase进行注册,一旦我将所有数据放入register,然后进入Firebase数据库,我发现我自己并不是在测试模式下创建数据库的注册用户。你能解释一下我可能做错了什么吗? 注册用户代码: 我正在使用实时数据库 规则Firebase:

  • 我正在尝试使用私钥和公钥对为sftp服务器设置身份验证。 我已经在本地计算机上设置了带有Bitvise SSH服务器的sftp服务器。我用SSH服务器生成了私钥和公钥。我已经在SSH服务器的主机密钥部分上设置了私钥,并且已经创建了一个虚拟帐户并将公钥设置到该帐户。 谢谢

  • 问题内容: 我正在使用MVC 5和Windows身份验证,并且需要在数据库而不是AD组中使用角色管理。我过去曾使用过asp.net成员身份解决方案来执行此操作,但希望使用更现代的身份表。我无权访问广告组。如何才能做到这一点? 问题答案: 就我个人而言,我将跳过ASP.NET标识部分,而仅使用自定义的授权过滤器即可。 从历史上看,在MVC中,身份验证(您可以证明自己是 谁 )和授权(您 可以 做什么