【问题标题】:Serverless to AWS - Gitlab CICD无服务器到 AWS - Gitlab CICD
【发布时间】:2020-04-22 08:25:15
【问题描述】:

我正在使用 Serveless Framework 开发一个应用程序,我想使用 GitLab CICD 在 AWS 中部署它。

按照最佳实践文档,我设置了具有以下结构的单个存储库:

│
├── services
│   ├── customer-api
│   │    └── handler.js, serverless.yml
│   └── payment-api
│        └── handler.js, serverless.yml
│
├── serverless-common.yml
└── .gitlab-ci.yml

所以在服务文件夹中我有几个文件夹(每个 api / lambda 一个)。 我还设置了以下简单的 GitLab CI/CD

image: node:latest

stages:
  - deploy

dev:
  environment: dev
  stage: deploy
  before_script:
    - npm config set prefix /usr/local
    - npm install -g serverless
  script:
    - serverless deploy --stage dev --verbose

我遇到的问题是我只想部署有变化的 lambda。

我应该在服务文件夹中逐个目录并为每个 api 运行 serverless deploy 吗?:

  script:
    - cd customer-api
    - serverless deploy --stage dev --verbose
    - cd ..
    - cd payment-api
    - serverless deploy --stage dev --verbose

您如何使用 GitLab CI/CD 管理无服务器部署?

【问题讨论】:

  • 到目前为止,GitLab CI/CD 还没有此功能,GitLab 将在 aws(在幕后)中创建 Cloud-formation 堆栈,并使用该堆栈对该堆栈进行所有进一步的操作,例如 update ,删除等。无论是否发生任何更改,堆栈都会遍历您在模板中提到的所有功能和资源,并将更改与旧工件本身进行比较。因此,如果您以最小的模板更改运行管道,那么您会发现与任何新资源的创建或修改相比,部署所花费的时间会更少。

标签: gitlab-ci serverless-framework aws-serverless


【解决方案1】:

关于你的文件夹结构,如果你能做这样的事情:

│
├── services
│   ├── customer-api
│   │    └── handler.js, customer-api.yml
│   └── payment-api
│        └── handler.js, payment-api.yml
│
├── serverless.yml
└── .gitlab-ci.yml

并在主 serverless.yml 文件中为这些函数提供参考,如下所示:

functions:
  customer-api: ${file(./services/customer-api/customer-api.yml)
  payment-api: ${file(./services/payment-api/payment-api.yml)

那么你不需要进入每个文件夹来执行 serverless.yml 文件:

script:
     - serverless deploy --stage dev --verbose

将是信息。 欲了解更多信息,您可以查看here

【讨论】:

    猜你喜欢
    • 2023-02-06
    • 2023-01-29
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 2022-01-08
    • 2021-10-08
    • 2019-06-15
    • 1970-01-01
    相关资源
    最近更新 更多