CodeDeploy运行原理

从开发者角度来看,CodeDeploy按如下方式运行:

  1. 用户将更新的、可部署的应用提交到GitHub或S3

  2. 这个动作同时触发事件给CodeDeploy

  3. 每台EC2机器上运行CodeDeploy agent,这个agent持续从CodeDeploy polling部署任务,如果检测到有更新,则触发新的部署

  4. EC2从S3或GitHub中拉取到appspec.yml + 新版本应用。EC2根据appspec.yml里的指令,进行部署。部署完后,将部署成功或失败的信息上报。

image-20221002102844115

CodeDeploy agent是开源的: https://github.com/aws/aws-codedeploy-agent

这个agent基于poll机制从CodeDeploy中拉取最新的部署,默认拉取时间间隔是1s:

image-20220317235803470

参考: https://docs.aws.amazon.com/codedeploy/latest/userguide/reference-agent-configuration.html


从运维人员的角度来说,使用CodeDeploy时要经过以下步骤:

img

  1. 首先创建一个应用(application),

  2. 在应用下创建部署组(deployment group), 里面根据EC2标签或ASG名称,来决定将应用部署到哪些机器上。一个应用下可以创建多个部署组,比如ProdDev,以在部署时决定将应用部署到哪些机器上。

  3. 创建部署组时,同时指定以何种部署配置(deployment configuration)来部署,例如同时在一半机器上部署,或同时只能在一台机器上进行部署:

image-20220318001018180

  1. 将新版本的应用上传到S3或GitHub

  2. 进行部署(deployment)。CodeDeploy拉取新版本应用,并使用里面的appspec.yml文件来进行步骤

  3. 观察结果, 决定是否重新部署或回滚到上一版本