使用 AWS CodePipeline 构建 CI/CD 管道 - 从源代码到部署的自动化
自动化从检测源代码变更到构建 / 测试 / 部署的过程。介绍 V2 触发器过滤器、手动审批操作和跨账户部署的设计。
CodePipeline 概述
CodePipeline 是将从源代码变更到部署的过程自动化的 CI/CD 服务。在源阶段检测 GitHub 或 CodeCommit 中的变更,在构建阶段由 CodeBuild 执行测试和构建。在部署阶段,由 CodeDeploy 或 CloudFormation 执行部署。
管道设计
在 V2 类型的管道中,可以通过触发器过滤器,仅在特定分支或文件路径发生变更时启动管道。在部署阶段之前放置手动审批操作,并通过 SNS 通知向审批人发送电子邮件。在跨账户部署中,通过管道构件 S3 存储桶的存储桶策略和 KMS 密钥策略,允许生产账户的角色进行访问,并在部署操作中对生产账户的角色执行 AssumeRole。
部署策略与回滚
在 CodePipeline 的部署阶段,可以与 CodeDeploy 联动,进行蓝/绿部署和金丝雀部署。在 ECS 的蓝/绿部署中,启动新的任务集并用测试流量进行验证,如果没有问题,就切换生产流量。切换后旧任务集会保留一定时间,因此出现问题时可以恢复到旧任务集。在 Lambda 的金丝雀部署中,将 10% 的流量导向新版本,并通过 CloudWatch Alarms 监控错误率,超过阈值时自动回滚。在 CloudFormation 的部署操作中,可以将变更集的创建和执行分开,构建通过手动审批确认变更内容后再执行的流程。
管道的监控与故障应对
由于管道的执行状态会作为 EventBridge 事件发布,因此可以在失败时通过 SNS 通知 Slack,或使用 Lambda 执行自动重试。通过 CloudWatch 指标可视化管道的执行时间、成功率和各阶段的耗时,跟踪构建时间的增长趋势和部署频率的变化。构建阶段的依赖项错误和部署阶段的权限不足有时会成为失败的原因,因此定期检查 buildspec.yml 中依赖项缓存的设置和 IAM 角色的权限范围。在管道 V2 中可以定义管道级别的变量,将环境名称和部署目标区域参数化,在多个环境中重复使用同一管道定义。
CodePipeline 的费用
CodePipeline V2 类型按操作执行次数按量计费,每月最初的 100 次免费,之后每次约 0.002 美元(截至 2026 年 8 月)。V1 类型为每条管道每月约 1.00 美元的固定费用。管道类型从 V1 和 V2 中选择,V2 除了 V1 的结构外,还有发布安全性和触发器设置的参数。CodeBuild 的构建费用(build.general1.small 每分钟约 0.005 美元)和 CodeDeploy 的费用(EC2 部署免费)另行产生。根据执行的频率,V1 和 V2 哪一个费用更低会有所不同。
阶段与操作的构成
CodePipeline 将获取源代码 / 构建 / 测试 / 部署等工序作为阶段按顺序排列来构成。在各个阶段中放置执行实际处理的操作。例如,在源阶段获取仓库的变更,在构建阶段执行编译和测试,在部署阶段发布到生产环境。在生产部署之前,也可以插入由人进行审批的步骤,经过最终确认后再继续。可以并行执行多个操作。通过将工序明确地构成为阶段,发布的流程会变得易于理解、易于管理。
与其他服务的联动与扩展
CodePipeline 与各种服务联动运行。它将构建和测试交给构建服务,将部署交给各种部署手段,并将它们作为管道的操作加入其中。也可以将基础设施的构建作为 IaC 的部署加入其中。如果将第三方工具或执行自定义处理的函数作为操作加入,就可以构建符合自身开发流程的管道。如果与检测仓库变更并自动启动管道的机制相结合,就可以让从提交到发布的过程自动运行。
总结
CodePipeline 是将从源代码变更到部署的过程自动化的 CI/CD 编排服务。可以通过 V2 类型的触发器过滤器确定启动条件,与 CodeDeploy 联动进行蓝/绿部署和金丝雀部署,并与 EventBridge 联动将管道监控和失败通知自动化。如果组合手动审批操作,就可以在自动部署的过程中加入人工确认。
参考资料(AWS 官方)
本页的第一手信息来源是 AWS 官方网站及官方文档。最新的规格与价格请以下列官方页面为准。
如本页内容与官方文档不一致,请以官方文档为准。