如何在sls部署期间安装私有npm github软件包

时间:2020-05-28 14:02:14

标签: serverless-framework github-actions

我的CI / CD无服务器部署失败,因为它无法安装私有npm软件包。

错误---------------------------------------------- ----

npm安装失败,代码为1 npm ERR!代码ENOENT npm ERR! syscall生成git npm ERR!路径git npm ERR! errno ENOENT npm ERR! enoent执行时出错: npm ERR! enoent未定义ls-remote -h -t ssh://git@github.com/private-org/private-repo.git npm ERR!天生的 npm ERR!天生的 npm ERR! enoent生成git ENOENT npm ERR! enoent这与npm无法找到文件有关。 npm ERR!

npm ERR!可以在以下位置找到此运行的完整日志: npm ERR! /github/home/.npm/_logs/2020-05-28T13_30_18_595Z-debug.log

  at ChildProcess.child.on.exitCode (/github/workspace/node_modules/serverless-webpack/lib/utils.js:91:16)
  at ChildProcess.emit (events.js:198:13)
  at ChildProcess.EventEmitter.emit (domain.js:448:20)
  at maybeClose (internal/child_process.js:982:16)
  at Process.ChildProcess._handle.onexit (internal/child_process.js:259:5)

来自上一个事件: 在PluginManager.invoke(/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:505:22) 在PluginManager.spawn(/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:525:17) 在ServerlessWebpack.BbPromise.bind.then.then.then(/github/workspace/node_modules/serverless-webpack/index.js:91:53) 在runCallback(timers.js:705:18) 在tryOnImmediate(timers.js:676:5) 在processImmediate(timers.js:658:5) 在process.topLevelDomainCallback(domain.js:126:23)

获得支持-------------------------------------------- 文件:docs.serverless.com 错误:github.com/serverless/serverless/issues 问题:forum.serverless.com 您的环境信息--------------------------- 作业系统:linux 节点版本:10.20.1 框架版本:1.54.0 插件版本:3.6.12 SDK版本:2.3.1 组件核心版本:1.1.2 组件CLI版本:1.4.0

  deploy:
    name: deploy
    needs: test
    if: startsWith(github.ref, 'refs/tags/')
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@master
    - uses: actions/setup-node@v1
      with:
        node-version: '12.x'
    - uses: webfactory/ssh-agent@v0.2.0
      with:
        ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} 
    - name: npm install
      run: npm install 
    - name: serverless deploy
      uses: serverless/github-action@master
      with:
        args: deploy
      env:
        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        SLS_DEBUG: true

通常,我使用webfactory/ssh-agent@v0.2.0解决此问题,因此第一个npm安装在这里可以正常工作,并且它设法使用提供的SSH密钥安装私有软件包。

但是,在无服务器部署期间,出现了以上错误,并且它无法安装私有npm软件包。有没有一种方法可以指定SSH密钥供无服务器操作使用?

2 个答案:

答案 0 :(得分:1)

我遇到了与您相同的错误,并且错误地找到了解决方案。 在circleCI中,lessless服务器正在读取〜/ .npmrc文件,该文件包含私有npm软件包的授权令牌,但是却没有在读取本地项目.npmrc文件,该文件包含私有公司软件包的路径。

因此,无意间将私有路径复制到〜/ .npmrc并神奇地将其部署成功。

此后,我只是更新我的circleCI步骤,以在〜/ .npmrc中获得这两条信息

step_login_github_packages: &step_login_github_packages
  name: Log in to Github Packages
  command: |
    echo "//npm.pkg.github.com/:_authToken=$GITHUB_PACKAGES_TOKEN" >> ~/.npmrc
    echo "@my-company:registry=https://npm.pkg.github.com/my-company" >> ~/.npmrc

答案 1 :(得分:0)

我想出了一个解决方案,但这意味着我不得不放弃无服务器操作。

  deploy:
    name: deploy
    needs: test
    if: startsWith(github.ref, 'refs/tags/')
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@master
    - uses: actions/setup-node@v1
      with:
        node-version: '12.x'
    - uses: webfactory/ssh-agent@v0.2.0
      with:
        ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
    - name: deploy
      run: |    
        npm i -g serverless
        npm install 
        serverless config credentials --provider aws --key $AWS_ACCESS_KEY_ID --secret $AWS_SECRET_ACCESS_KEY
        sls deploy
      env:
        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}