首页 > 解决方案 > 如何使用 github 操作部署具有多个 packages.json 的无服务器单声道存储库?

问题描述

我正在尝试部署作为 mono repo 一部分的微服务,为此我正在使用 github 操作,但我遇到了与 package.json 文件中的插件相关的问题。这是我的项目的结构:

--repo
---package.json
---resources
----package.json
---services
----Service A
-----package.json
----Service B
-----package.json

首先,我正在尝试部署基本上创建 S3 存储桶、cognito 用户池等的资源文件夹......我已经添加了名为“serverless-cognito-add-custom-attributes”的插件作为这个项目的一部分,这个插件仅存在于“resources”文件夹内的 package.json 中。

尝试从 github 操作部署时出现此错误:

未找到无服务器插件“serverless-cognito-add-custom-attributes”。确保它已安装并列在无服务器配置文件的“插件”部分。

这是我在 github 操作中使用的 .yml 文件:

name: Deploy Resources to Dev

on:
  push:
    branches:
      - dev
    tags:
      - RC-*
    paths: 
      - './resources'

jobs:
  InstallActions:
    name: deploy
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Download Node
      uses: actions/setup-node@v1
      with:
        node-version: "12.x"
    - name: Install NPM Global Packages
      run: |
        npm install --global
        npm install "./resources" --global
    - name: Serverless Deploy       
      uses: serverless/github-action@master
      with:
        args: deploy --stage dev --config "./resources/serverless.yml"
      env:
        AWS_ACCESS_KEY_ID: ${{secrets.AWS_ACCESS_KEY_DEV}}
        AWS_SECRET_ACCESS_KEY: ${{secrets.AWS_SECRET_ACCESS_KEY_DEV}}

当上面的 .yml 文件运行时,我可以在控制台上看到:

+ ----@1.0.0
added 1 package in 2.935s
+ resources@1.0.0
added 3 packages from 3 contributors in 0.654s

标签: amazon-web-servicesgithubpackage.jsonserverless-frameworkgithub-actions

解决方案


出于某种原因,似乎

uses: serverless/github-action@master

从子文件夹安装时无法找到软件包,但手动执行所有操作似乎工作正常:

name: Deploy Resources to Dev

on:
  push:
    branches:
      - dev
    tags:
      - RC-*
    paths: 
      - './resources'

jobs:
  Deploy:
    name: deploy
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Download Node
      uses: actions/setup-node@v1
      with:
        node-version: "12.x"
    - name: Install Serverless Framework
      run: npm install -g serverless
    - name: Serverless Authentication
      run: sls config credentials --provider aws --key ${{secrets.AWS_ACCESS_KEY_DEV}} --secret ${{secrets.AWS_SECRET_ACCESS_KEY_DEV}}
    - name: Install NPM dependencies
      run: |
        npm install
        npm install "./resources"
    - name: Deploy to AWS
      run: serverless deploy -v -s dev
      working-directory: "./resources"

我有这个问题大约 17 个小时,然后决定全部手动而不是使用包 serverless/github-action@master


推荐阅读