内容提要
该项目结合Jenkins与CodeDeploy实现蓝绿发布,CI与CD分开,CI将war包存至AWS S3。在CD过程中,使用CodeDeployDefault.OneAtATime进行健康检查,若失败则停止发布。环境准备包括创建IAM角色、EC2实例及安装Jenkins等。配置文件和脚本在Bitbucket中管理,CD JOB通过AWS CLI从S3获取war包并进行部署,确保不停机发布。
延伸解读
CI与CD分离的设计考量
该方案将CI与CD拆分为独立的Jenkins任务,CI负责构建war包并归档至S3,CD则从S3拉取指定BuildNumber的war包进行部署。这种分离使得构建与部署解耦,便于回滚和重复部署,同时通过BuildNumber参数化构建,可以灵活选择历史版本发布,适合需要频繁迭代且要求稳定性的生产环境。
健康检查与故障处理机制
CD过程中采用CodeDeployDefault.OneAtATime部署配置,逐台更新实例。每台部署后通过负载均衡进行健康检查,若失败则停止后续发布,并将该实例从ALB中剔除。这种机制能有效防止故障扩散,保证至少有一台实例可用,从而实现不停机发布,但发布速度较慢,适合对可用性要求高的场景。
配置与代码分离的实践
文章强调将Java代码与配置文件分离,war包中不包含环境相关配置,而是通过Bitbucket单独管理不同环境的properties文件。CD任务中从Bitbucket拉取对应分支的配置文件,重命名后与war包一起部署。这种方式使同一war包可跨测试、预生产、生产环境使用,减少了构建次数,提高了部署灵活性。
部署类型选择与适用场景
在CodeDeploy部署组配置中,作者选择了就地部署而非蓝绿部署,原因是蓝绿部署需要自动扩展组,对当前业务来说设备成本较高。就地部署配合负载均衡和逐台发布,同样能实现不停机,但发布过程中实例数量会暂时减少,可能影响性能。读者需根据业务规模和预算权衡选择。
Q&A
如何使用Jenkins和AWS CodeDeploy实现蓝绿发布?
通过将Jenkins与CodeDeploy结合,CI构建后将war包存至AWS S3,CD过程中使用CodeDeployDefault.OneAtATime进行健康检查,确保不停机发布。
在Jenkins中如何配置CI和CD?
在Jenkins中,CI构建后需将war包归档至S3,CD则通过AWS CLI从S3获取war包并进行部署,确保配置文件和脚本在Bitbucket中管理。
AWS CodeDeploy的健康检查是如何工作的?
AWS CodeDeploy使用CodeDeployDefault.OneAtATime策略进行健康检查,若某台实例健康检查失败,则停止发布并将该实例从负载均衡中剔除。
在项目中如何准备环境以支持Jenkins和CodeDeploy?
环境准备包括创建IAM角色、EC2实例,并安装Jenkins、JDK、Maven、AWS CLI和Git等工具。
CI构建后如何将war包存储到AWS S3?
CI构建后,通过Jenkins的构建后操作,将war包归档并上传至指定的AWS S3桶中,使用BuildNumber命名。
为什么选择不停机发布的方式?
选择不停机发布的方式可以在生产环境中减少停机时间,确保用户体验不受影响,同时通过健康检查保障发布的安全性。