CodePipeline 构建规范和多个构建操作
CodePipeline buildspec and multiple build actions
一个简单的构建规范,例如:
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 中,我可以像下面这样并行创建 运行 的操作,这在构建规范中是如何建模的?还是不可能?
您可以在 CodePipeline 中使用来自同一来源的两个不同的 CodeBuild 项目作为两个单独的并行 操作。
为此,您可以在源代码中使用两个 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 中的 Build 阶段时,将两个 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
)。
enter image description here
据我了解,如果您只有一个来源,则不能有两个构建规范文件,因为您只能将该文件命名为构建规范。也许你可以试试 "Insert build commands" 选项
一个简单的构建规范,例如:
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 中,我可以像下面这样并行创建 运行 的操作,这在构建规范中是如何建模的?还是不可能?
您可以在 CodePipeline 中使用来自同一来源的两个不同的 CodeBuild 项目作为两个单独的并行 操作。
为此,您可以在源代码中使用两个 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 中的 Build 阶段时,将两个 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
)。
enter image description here 据我了解,如果您只有一个来源,则不能有两个构建规范文件,因为您只能将该文件命名为构建规范。也许你可以试试 "Insert build commands" 选项