![](/img/trans.png)
[英]Install an npm module from a private GitHub repository using GitHub Actions
[英]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
中不可用的權限的令牌,您可以創建一個個人訪問令牌並將其設置為您的存儲庫中的秘密:
- 使用或創建具有該存儲庫的適當權限的令牌。 有關詳細信息,請參閱“為命令行創建個人訪問令牌” 。
- 將令牌作為機密添加到工作流的存儲庫中,並使用
${{ secrets.SECRET_NAME }}
語法引用它。 有關詳細信息,請參閱“創建和使用加密機密” 。
私有存儲庫正在通過 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
創建具有足夠訪問權限的 SSH 密鑰。 出於安全原因,請勿使用您的個人 SSH 密鑰,而是設置一個專用密鑰以用於 GitHub 操作。 如果您不確定此步驟,請參閱下面的一些提示。
確保您沒有在私鑰上設置密碼。
在您的存儲庫中,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 中進行測試
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.