GitHub Actions执行npm ci时github协议依赖遇权限拒绝错误
解决方案
方法一:在CI流程中替换Git协议(推荐)
在你的GitHub Actions工作流里,执行npm ci之前添加一步Git配置,让所有指向GitHub的SSH请求自动转为HTTPS请求,无需修改本地依赖配置即可解决CI环境的权限问题:
修改后的node.js.yml:
name: Node.js CI on: push: branches: [ "master" ] pull_request: branches: [ "master" ] jobs: build: runs-on: ubuntu-latest strategy: matrix: node-version: [12.x, 14.x, 16.x] steps: - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} cache: 'npm' # 添加这一步,替换Git协议 - run: git config --global url."https://github.com/".insteadOf "ssh://git@github.com/" - run: npm ci - run: npm test
原理说明
GitHub Actions的运行环境默认没有配置可访问GitHub的SSH密钥,而github:协议的npm依赖默认会用SSH方式拉取仓库。通过上述Git配置,所有ssh://git@github.com/开头的仓库地址都会被替换为https://github.com/,HTTPS方式可以匿名拉取公共仓库,完美适配CI环境,同时本地开发环境不受任何影响。
备选方法:临时修改package.json(不推荐)
如果上述方法不适用,也可以在CI流程中临时修改package.json的依赖地址,将github:协议替换为HTTPS地址:
# 在npm ci前添加 - run: sed -i 's/github:uNetworking\/uWebSockets.js#v20.10.0/https:\/\/github.com\/uNetworking\/uWebSockets.js.git#v20.10.0/' package.json
但这种方法需要维护版本号同步,不如第一种方法灵活。
内容的提问来源于stack exchange,提问作者Misiur
相关产品推荐
相关产品推荐

