使用单个主分支实现蓝绿部署

61次阅读
没有评论

问题描述

希望了解是否可以使用单个主分支来实现蓝绿部署,而不必创建两个不同的生产分支(master/blue 和 master/green)。用户的项目涉及以下技术栈:
– CloudFront,将源设置为用于提供前端单页应用(SPA)静态资源的S3存储桶。
– 前端应用与 AWS API Gateway 进行通信,API Gateway 再连接 AWS Lambda。
– AWS Lambda 负责与 DynamoDB 进行数据库 CRUD 操作。
– 前端应用和 Lambda 函数各自拥有自己的 Git 仓库,Git 主分支合并操作会触发 2 个 Circle CI 作业,一个将前端资源复制到 S3 存储桶,另一个使用 Serverless 框架部署 Lambda。

用户还考虑在蓝绿部署中,使用 2 个 S3 存储桶、API Gateway 和 Lambda 函数的两个实例。为了实现蓝绿切换,需要将 CloudFront 的源从一个 S3 存储桶更改为另一个,然后创建无效化操作以清除缓存。用户还想知道如何让单一生产 Git 分支的蓝绿部署工作,以及如何在 Git 预提交钩子中执行 checkout_current_active_stack 操作。

解决方案

请注意以下操作可能因版本差异而有所不同。确保在执行任何操作之前进行适当的测试和备份。

使用分阶段构建和部署

首先,将持续集成(CI)中的“构建”与持续部署(CD)中的“流水线”分开。在构建阶段,您可以继续使用 CircleCI 进行构建,而在部署阶段,建议使用类似 AWS CodeDeploy 的工具来实现蓝绿部署。您可以将 CircleCI 用于协调 AWS CodeDeploy,从而实现整个流程。

以下是一种将构建和部署阶段分开的方法:

  1. 在构建阶段,使用 CircleCI 构建并测试代码。生成的构建包可以存储在诸如 Sonatype Nexus 或 JFrog Artifactory 之类的制品库中,以备将来使用。

  2. 在部署阶段,使用 AWS CodeDeploy 来执行蓝绿部署。AWS CodeDeploy 原生支持蓝绿部署模式,无需过多考虑如何实现。

这样分阶段的方法有以下几个好处:

  • 您只需要在主分支上编译和测试一次,然后通过制品库传递软件包。
  • 您的构建包会永久存储在制品库中,这意味着您可以随时复现旧版本,因为您拥有用于部署的特定软件包。
  • CodeDeploy 将为您处理释放模式,无需过多考虑如何实现蓝绿部署。

使用应用程序发布自动化工具

另一个方法是使用应用程序发布自动化工具,例如 BuildMaster 或 Nolio。这些工具可以建模整个流水线,从构建到部署,使整个过程更加自动化和可控。如果您喜欢使用多个第三方 SaaS 解决方案来构建流水线,这也是一个不错的选择。

综上所述,通过将构建和部署阶段分开,您可以更好地管理蓝绿部署过程,同时使用专门的工具来处理部署的各个方面,从而提高效率和可靠性。

请确保根据您的项目和工具的具体要求进行适当的调整和配置。

总结

通过将持续集成和持续部署的阶段分开,您可以更好地管理蓝绿部署过程。您可以使用 CircleCI 进行构建,并将构建包存储在制品库中。然后,您可以使用 AWS CodeDeploy 来实现蓝绿部署,无需过多考虑部署细节。此外,您还可以考虑使用应用程序发布自动化工具,以进一步提高部署的自动化程度和可控性。

请在执行任何操作之前,仔细检查文档并在安全的环境中进行测试,以确保操作不会影响生产环境。

正文完