使用 GitHub Actions 从私有 GitHub 存储库安装 npm 模块
Posted
技术标签:
【中文标题】使用 GitHub Actions 从私有 GitHub 存储库安装 npm 模块【英文标题】:Install an npm module from a private GitHub repository using GitHub Actions 【发布时间】:2020-04-25 21:32:33 【问题描述】:我正在尝试使用 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
文件中。对此有什么想法吗?
【问题讨论】:
这能回答你的问题吗? npm install private github repositories by dependency in package.json 更具体地说,上面链接问题中的这个答案:***.com/a/40312033/2089675 这对我不起作用。 我不确定什么不起作用,但您可能还想尝试更改用于 repo 的 url。从您收到的错误消息来看,npm 似乎正在尝试使用 ssh 而不是 http(s) 来解析 url。在我链接的那个问题页面中,一些答案显示了使用 http(s) url 的不同语法,这可能有助于确保使用 github 令牌而不是期望 ssh 密钥 【参考方案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 和 oauth:create 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
【讨论】:
以上是关于使用 GitHub Actions 从私有 GitHub 存储库安装 npm 模块的主要内容,如果未能解决你的问题,请参考以下文章
在 Github Actions 上从 package.json 安装私有 github 包
如何在 GitHub Actions 中构建的 Dockerfile 中使用 github 令牌并尝试克隆私有存储库?
Github Actions 使用 maven 对另一个存储库的私有包注册表进行身份验证