CodePipeline构建规范和多个构建操作

时间:2017-09-03 05:29:57

标签: amazon-web-services aws-codepipeline aws-codebuild

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

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中建模的?或者不可能?

enter image description here

2 个答案:

答案 0 :(得分:3)

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

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

e.g。

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中的 Build 阶段时,请将两个CodeBuild项目用作并行操作。

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

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

e.g。

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按顺序执行这些命令。如果你真的需要并行运行它们,有很多方法可以做到。

我的偏好是将命令放在Makefile中并通过buildspec.yml(例如make --jobs 2 backend frontend)进行调用。

答案 1 :(得分:-2)

enter image description here 根据我的理解,如果您只有一个源,则不能有两个buildspec文件,因为您只能将该文件命名为buildspec。也许你可以试试&#34;插入构建命令&#34;选项