CodePipeline的buildspec和多个构建操作

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中,我可以创建并行运行的操作,如下图所示,这在构建规范中如何建模?或者说这是不可能的吗?

enter image description here


这已经不再是真的了,请获取有关AWS CodeBuild的最新更新,您可以在其中向您的AWS CodePipeline添加多个构建阶段使用不同的AWS CodeBuild构建规范文件从同一源创建多个构建 - Percy Mohale
2个回答

6

您可以将同一来源的两个不同的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按顺序执行这些命令。如果您确实需要并行运行它们,有许多方法可以做到。 我更喜欢将命令放在一个Makefile中,并从您的buildspec.yml中调用它们(例如make --jobs 2 backend frontend)。

但这样会按顺序运行命令,对吗?我认为最好将其作为单独的操作来执行,以便并行运行。 - Jiew Meng
构建规范中的每个阶段都是按顺序而非并行运行的。http://docs.aws.amazon.com/codebuild/latest/userguide/view-build-details.html#view-build-details-phases - Noel Llevares
@JiewMeng 我知道CodePipeline的阶段可以有并行操作。但我不认为CodeBuild支持这个功能。你能指出一些文件说明吗?这对我也很有用。 - Noel Llevares
你如何为每个构建指定不同的yml文件?我只有选择buildspec.yml文件的选项。 - ChrisO
@ChrisO 示例:https://aws.amazon.com/blogs/devops/create-multiple-builds-from-the-same-source-using-different-aws-codebuild-build-specification-files - Noel Llevares
显示剩余2条评论

-4

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


4
现在这个说法已经不正确了,你可以根据自己的喜好来命名buildspec文件。 - Rohit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接