AWS CodeBuild

全托管的云端 CI 构建服务,可完成源代码编译、测试执行和部署包创建

概述

AWS CodeBuild 是一项全托管的持续集成(CI)服务,用于执行源代码的构建、测试和打包。无需管理构建服务器,每次构建都会启动独立的容器环境,并行构建也会自动扩展。通过 buildspec.yml 定义构建步骤,可从 CodeCommit、GitHub、Bitbucket、S3 获取源代码。支持 Docker 镜像构建、Lambda 函数打包、静态站点生成等各类构建任务。

buildspec.yml 的阶段设计与缓存策略

CodeBuild 的构建流程由 buildspec.yml 的 4 个阶段组成。install 阶段设置运行时和工具,pre_build 进行测试准备或认证处理(如 ECR 登录),build 执行编译和测试,post_build 生成制品或发送部署通知。缩短构建时间的关键在于缓存策略:S3 缓存可在构建间复用依赖包(node_modules、.m2 等),本地缓存可保留 Docker 层缓存。实际应用中,S3 缓存与本地缓存并用效果最佳——首次构建从 S3 恢复,同一构建主机上的连续构建则使用本地缓存加速。相比 GitHub Actions 与仓库紧密耦合且拥有丰富的 Marketplace 操作,CodeBuild 的优势在于构建环境可直接访问 VPC 内的资源(RDSElastiCache),并通过 IAM 角色实现精细的访问控制。

构建环境与实例规格选择

CodeBuild 为每次构建启动独立的容器环境,并行构建也会自动扩展。构建环境镜像可选择 AWS 提供的托管镜像(Ubuntu、Amazon Linux 2)或注册在 ECR 中的自定义镜像。托管镜像预装了主流语言运行时(Node.js、Python、Java、Go、.NET),可缩短 install 阶段的设置时间。实例规格分为 small(3 GB 内存)、medium(7 GB)、large(15 GB)、xlarge(70 GB)、2xlarge(145 GB)五档,根据构建负载选择。计费按分钟计算,small 约 0.005 美元/分钟,large 约 0.02 美元/分钟。构建 Docker 镜像时需启用特权模式以 Docker-in-Docker 方式运行,然后推送到 ECR 是常见做法。CI/CD 相关书籍(Amazon)可帮助系统性学习。

CodePipeline 集成与 Monorepo 支持

CodeBuild 最典型的应用是与 CodePipeline 组合构建 AWS 原生 CI/CD 流水线。以 GitHub 推送为触发,CodeBuild 执行构建和测试,成功后通过 CodeDeploy 部署到 ECSLambda。在 Monorepo 架构中,可使用 buildspec.yml 的批量构建功能并行执行多个构建。通过 build-list 或 build-graph 定义依赖关系,实现公共库构建完成后再启动应用构建等控制。需注意 CodeBuild 默认超时为 60 分钟,大型 Monorepo 构建或集成测试可能不够用,最大可延长至 8 小时,但构建时间过长时应优先考虑并行化和缓存优化。启用报告功能后,可在 CodeBuild 控制台可视化测试结果和代码覆盖率,追踪质量趋势。

共有するXB!