繁体   English   中英

使用 GitHub 操作从私有 GitHub 存储库安装 npm 模块

[英]Install an npm module from a private GitHub repository using GitHub Actions

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

package.json我有:

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

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

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

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

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

这就是我设法从私有 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
      ...

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

有关作为依赖项的 Git URL 的详细信息,请参阅此文档

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

https 和 oauth创建一个具有“repo”范围的访问令牌,然后使用以下语法

"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)

一个非常简单的解决方案对我有用。 您创建一个新密钥,为其授予对存储库的只读访问权限,并且在构建过程中使用该密钥。 您可以添加多个键。

基于以下操作 - https://github.com/webfactory/ssh-agent

1.在package.json中提供一个私有repo,格式如下:

"dependencies": {
    "repo": "git+ssh://git@github.com:user/private_repo.git",
}

2. 在本地生成部署密钥。 使用空密码

ssh-keygen -f my_key

3. 通过 GitHub UI 保存部署密钥(最好是只读的)。 使用my_key.pub的内容

部署密钥

4. 通过 GitHub UI 为目标存储库创建名为REPO_SSH_KEY的 GitHub 操作密钥。 使用my_key的内容——它是一个私钥

SSH 秘密

5. 将 GitHub 操作工作流文件更新为如下所示

# ...
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Add SSH key to chekout a private repo
        uses: webfactory/ssh-agent@v0.5.4
        with:
          ssh-private-key: ${{ secrets.REPO_SSH_KEY }}

      - name: Checkout code
        uses: actions/checkout@v2
      
      # ... the rest steps

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

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

有关更多信息,请参阅以下主题: 有没有办法在单个 npmrc 文件中配置多个注册表

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM