使用 AWS CodePipeline 构建 CI/CD 流水线 - 从源代码到部署的自动化

自动化从源代码变更检测到构建、测试、部署的全流程。介绍 V2 触发器过滤器、手动审批操作和跨账户部署的设计。

CodePipeline 概述

CodePipeline 是将源代码变更到部署全流程自动化的 CI/CD 服务。源阶段检测 GitHub 或 CodeCommit 的变更,构建阶段由 CodeBuild 执行测试和构建,部署阶段由 CodeDeployCloudFormation 执行部署。

流水线设计

流水线 V2 类型支持触发器过滤器,可仅在特定分支或文件路径变更时启动流水线。在部署阶段前放置手动审批操作,通过 SNS 通知向审批者发送邮件。跨账户部署中,通过流水线制品 S3 存储桶的桶策略和 KMS 密钥策略授予生产账户角色访问权限,部署操作中 AssumeRole 生产账户的角色。

部署策略与回滚

CodePipeline 的部署阶段可与 CodeDeploy 联动实现蓝/绿部署和金丝雀部署。ECS 蓝/绿部署中,启动新的任务集并通过测试流量验证,确认无问题后切换生产流量。切换后旧任务集保留一段时间,出现问题时可立即回滚。Lambda 金丝雀部署中,将 10% 的流量导向新版本,通过 CloudWatch Alarms 监控错误率,超过阈值时自动回滚。CloudFormation 部署操作中,建议将变更集的创建和执行分离,通过手动审批确认变更内容后再执行部署。 要全面学习 CodePipeline 的流水线设计,请参考技术书籍 (Amazon)

流水线的监控与故障处理

流水线的执行状态作为 EventBridge 事件发布,因此可在失败时通过 SNS 向 Slack 发送通知,或通过 Lambda 执行自动重试。通过 CloudWatch 指标可视化流水线的执行时间、成功率和各阶段耗时,追踪构建时间的增长趋势和部署频率的变化。大多数故障源于构建阶段的依赖关系错误或部署阶段的权限不足,因此定期审查 buildspec.yml 的依赖缓存设置和 IAM 角色的权限范围非常重要。流水线 V2 可定义流水线级别的变量,将环境名称和部署目标区域参数化,在多个环境中复用同一流水线定义。

CodePipeline 的费用

CodePipeline V2 类型按操作执行次数计费,每月前 100 次免费,之后每次约 0.002 美元。V1 类型每条流水线每月固定约 1.00 美元。新建流水线推荐使用 V2 类型。CodeBuild 的构建费用(build.general1.small 每分钟约 0.005 美元)和 CodeDeploy 的费用(EC2 部署免费)另行计算。执行频率低时 V2 的按量计费更有优势,每天执行数十次时 V1 的固定费用可能更经济。

总结

CodePipeline 是将源代码变更到部署全流程自动化的 CI/CD 编排服务。V2 类型的触发器过滤器可精细控制启动条件,与 CodeDeploy 联动实现蓝/绿和金丝雀部署,与 EventBridge 联动自动化流水线监控和故障通知。结合手动审批操作,可构建兼顾自动化与人工判断的部署流程。