簡體   English   中英

如何在 github 操作工作流 ci 中通過 npm 安裝私有 github 存儲庫

[英]How to install private github repository via npm in github actions workflow ci

我正在嘗試通過運行npm install在 github 工作流 ci 中安裝 npm 依賴項。 但是我收到以下錯誤:

npm ERR! Error while executing:
npm ERR! /usr/bin/git ls-remote -h -t ssh://git@github.com/private-org/private-repo.git
npm ERR! 
npm ERR! Warning: Permanently added the RSA host key for IP address 'removed' to the list of known hosts.
npm ERR! git@github.com: Permission denied (publickey).
npm ERR! fatal: Could not read from remote repository.

ci.yml

name: CI

on:
  push:
    branches: [master ]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js
      uses: actions/setup-node@v1
      with:
        node-version: '12.x'
    - run: node --version
    - run: npm install

package.json

  ...
  "dependencies": {
    "some-pacakage": "git+ssh://git@github.com/private-org/private-repo.gitt",
  },
  ...

npm 通過 github 安裝這個some-package 存儲庫與運行工作流的組織位於同一組織內。要在本地解決此問題,您在與組織相關的 github 帳戶上設置 ssh 密鑰。

但是我該如何解決這個問題,以便它能夠通過 github repo 在工作流 ci 中安裝 package,我沒有使用我的個人 github 帳戶。

標准令牌沒有足夠的權限:

令牌的權限僅限於包含您的工作流程的存儲庫。 有關更多信息,請參閱GITHUB_TOKEN的權限”

您必須手動創建一個個人訪問令牌來授予對包的訪問權限:

如果您需要一個需要GITHUB_TOKEN中不可用的權限的令牌,您可以創建一個個人訪問令牌並將其設置為您的存儲庫中的秘密:

  1. 使用或創建具有該存儲庫的適當權限的令牌。 有關詳細信息,請參閱“為命令行創建個人訪問令牌”
  2. 將令牌作為機密添加到工作流的存儲庫中,並使用${{ secrets.SECRET_NAME }}語法引用它。 有關詳細信息,請參閱“創建和使用加密機密”

來源: https://help.github.com/en/actions/configuring-and-managing-workflows/authenticating-with-the-github_token

私有存儲庫正在通過 ssh 安裝。 如果您在管道中設置了 ssh 密鑰,它將在嘗試安裝時使用該 ssh 密鑰。

幸運的是,有一個 github 操作允許我們這樣做https://github.com/webfactory/ssh-agent

在 npm 安裝上方添加以下內容:

  - uses: webfactory/ssh-agent@v0.2.0
  with:
    ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} 

設置/先決條件

https://github.com/webfactory/ssh-agent#usage

  1. 創建具有足夠訪問權限的 SSH 密鑰。 出於安全原因,請勿使用您的個人 SSH 密鑰,而是設置一個專用密鑰以用於 GitHub 操作。 如果您不確定此步驟,請參閱下面的一些提示。

  2. 確保您沒有在私鑰上設置密碼。

  3. 在您的存儲庫中,go 到 Settings > Secrets 菜單並創建一個新密鑰。 在本例中,我們將其命名為 SSH_PRIVATE_KEY。 將私有 SSH 密鑰文件的內容放入內容字段。 此密鑰應以 -----BEGIN... PRIVATE KEY----- 開頭,由多行組成並以 -----END... PRIVATE KEY----- 結尾。

Travis遷移到GitHub Actions時,我遇到了類似的問題。

您需要做的基本上是Git如何獲取您的遠程存儲庫。 package.json中,使用了"git+ssh://git@github.com/private-org/private-repo.gitt" 因此,它嘗試使用 ssh 訪問密鑰來獲取存儲庫。 如果您不添加訪問密鑰,它將失敗。

相反,我們要做的是重新配置Git以使用 HTTP 身份驗證。

這是我在GitHub Actions workflow中使用它的方法。 我已在 GitHub Actions 中將我的GitHub PAT token作為秘密添加為GA_TOKEN

  - name: Reconfigure git to use HTTP authentication
    run: |
      git config --global url.https://${{ secrets.GA_TOKEN }}@github.com/.insteadOf ssh://git@github.com/

如果您使用的是 docker 容器 / docker-compose 我最近為 npm 安裝使用標准輸入或 auth.Z6466DEEC7F6ECDF3FCA

目前它僅在 docker-containers 中進行測試

GitHub: https://github.com/with-shrey/gitpm-node

Npm: https://www.npmjs.com/package/gitpm-node

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM