3

一个简单的构建规范,例如:

version: 0.2

phases:
  install:
    commands:
      - (cd lambda/src; npm install)
      - aws cloudformation package --template-file lambda/sam.yml --s3-bucket skynet-lambda --output-template-file SkynetLambdaPackaged.yml

artifacts:
  type: zip
  files:
    - SkynetLambdaPackaged.yml

当我在构建阶段执行一项操作时工作正常。但是如果我想有更多的构建操作,例如:我想并行构建我的 api 服务器和前端文件。我该如何建模?

更新

在 CodePipeline 中,我可以创建并行运行的操作,如下所示,这是如何在 buildspec 中建模的?还是不可能?

在此处输入图像描述

4

2 回答 2

4

您可以将来自同一源的两个不同 CodeBuild 项目用作 CodePipeline 中的两个单独的并行操作。

为此,您可以buildspec在源代码中使用两个文件。

例如

buildspec-frontend.yml

phases:
  install:
    commands:
      - (cd frontend/src; npm run build)
      - aws s3 sync frontend/dist s3://<insert s3 bucket url here>/ --delete 

buildspec-backend.yml

phases:
  install:
    commands:
      - (cd lambda/src; npm install)
      - aws cloudformation package --template-file lambda/sam.yml --s3-bucket skynet-lambda --output-template-file SkynetLambdaPackaged.yml

然后,创建一个使用前端构建规范的前端 CodeBuild 项目。对后端重复。

然后,当您进入 CodePipeline 中的构建阶段时,将两个 CodeBuild 项目用作并行操作。


更新:以下信息现在无关紧要,因为我误解了这个问题。

如果您的前端可以部署到 s3,只需将其部署命令添加到您放置 api 部署命令的位置。

例如

phases:
  install:
    commands:
      - (cd lambda/src; npm install)
      - aws cloudformation package --template-file lambda/sam.yml --s3-bucket skynet-lambda --output-template-file SkynetLambdaPackaged.yml
      - (cd frontend/src; npm run build)
      - aws s3 sync frontend/dist s3://<insert s3 bucket url here>/ --delete

如果您的前端不在 s3 上,只需将这些行替换为您自己的前端部署命令即可。

CodeBuild 按顺序执行这些命令。如果你真的需要并行运行它们,有很多方法可以做到。

我的偏好是将命令放在 a 中并从您的(例如)中Makefile调用它们。buildspec.ymlmake --jobs 2 backend frontend

于 2017-09-03T17:30:36.060 回答
-3

在此处输入图像描述 根据我的理解,如果您只有一个源,则不能有两个 buildspec 文件,因为您只能将该文件命名为 buildspec。也许您可以尝试“插入构建命令”选项

于 2017-09-06T20:56:01.830 回答