【问题标题】:Install an npm module from a private GitHub repository using GitHub Actions使用 GitHub Actions 从私有 GitHub 存储库安装 npm 模块
【发布时间】:2023-03-25 20:25:01
【问题描述】:

我正在尝试使用 GitHub Actions 为 Node.js 项目运行构建。作为npm install 的一部分,我需要直接从私有 GitHub 存储库(而不是 GPR!)安装 npm 模块。

package.json我有:

"dependencies": {
  ...
  "my-module": "github:<org>/<my-module>#master",
  ...
},

但是,在运行 npm install 时,我得到:

npm 错误! git@github.com:权限被拒绝(公钥)。 npm 错误!致命:无法从远程存储库读取。

存储库是我自己组织的一部分,并且在本地(即从我的机器上)它可以工作。我怎样才能让这个运行?

我已经尝试过设置NODE_AUTH_TOKEN 环境变量,但没有任何区别。尽管您经常发现此建议,但它似乎只针对 GPR。我想避免将令牌硬编码到package.json 文件中。对此有什么想法吗?

【问题讨论】:

  • 更具体地说,上面链接问题中的这个答案:stackoverflow.com/a/40312033/2089675
  • 这对我不起作用。
  • 我不确定什么不起作用,但您可能还想尝试更改用于 repo 的 url。从您收到的错误消息来看,npm 似乎正在尝试使用 ssh 而不是 http(s) 来解析 url。在我链接的那个问题页面中,一些答案显示了使用 http(s) url 的不同语法,这可能有助于确保使用 github 令牌而不是期望 ssh 密钥

标签: node.js github npm github-actions


【解决方案1】:

这就是我设法从私有 GitHub 存储库安装依赖项的方式。

package.json 中的依赖可以如下添加。 github: 前缀是可选的。指定#branch#tag 也是可选的。

    "dependencies": {
        ...
        "myrepo": "username/myrepo#master",
        "myotherrepo": "github:username/myotherrepo"
    },

这是一个示例工作流程。 PAT 是一个repo 作用域Personal Access Token。禁用actions/checkout 上的持久凭据很重要,否则它们将覆盖您的PAT。请注意,git config 更改在步骤之间持续存在,因此您只需在每个作业中运行一次。

      - uses: actions/checkout@v2
        with:
          persist-credentials: false
      - uses: actions/setup-node@v1
        with:
          node-version: 12.x
      - run: git config --global url."https://${{ secrets.PAT }}@github.com/".insteadOf ssh://git@github.com/
      - run: npm ci
      ...

【讨论】:

  • 像一个魅力一样工作,这在项目有模块但源是 github 私有 repos 而不是 NPM 的情况下非常有用
  • github: 为包添加前缀根本不起作用
  • 谢谢!这就像一个魅力,包括github: 前缀。我还要提一下,需要在存储库机密中创建 PAT 机密
  • @peterevans 上帝保佑你,我的伙计 我的包文件已经使用 HTTPS URL 访问私人仓库,所以我在答案中将 ssh://git@github.com/ 更改为 github.com它就像一个魅力
【解决方案2】:

从错误和您包含依赖项的方式(在 package.json 中)来看,您似乎没有通过身份验证凭据(令牌、ssh。

有关Git URLs as Dependencies 的详细信息,请参阅此文档

可以通过 https 和 oauth 或 ssh 完成。

https 和 oauthcreate an access token 具有“repo”范围,然后是 use this syntax

"package-name": "git+https://<github_token>:x-oauth-basic@github.com/<user>/<repo>.git"

ssh:设置 ssh,然后使用以下语法:

"package-name": "git+ssh://git@github.com:<user>/<repo>.git"
(note the use of colon instead of slash before user)

【讨论】:

  • 您可以使用x-oauth-basic 方法,但请确保将persist-credentials: false 添加到上述回复中提到的结帐操作中。
【解决方案3】:

您应该编辑您的.npmrc 文件。 你也可以使用npm config

npm config set @myco:registry http://reg.example.com

请参阅以下主题以获取更多信息: Is there any way to configure multiple registries in a single npmrc file

【讨论】:

    猜你喜欢
    • 2021-11-24
    • 2022-08-08
    • 2019-05-05
    • 2014-01-18
    • 1970-01-01
    • 2022-11-04
    • 2017-03-08
    • 2014-06-06
    • 1970-01-01
    相关资源
    最近更新 更多