使用 AWS 时,将应用程序部署到新创建的实例的好方法似乎是通过 AWS CodeDeploy。这工作如下:
- 为应用设置自动伸缩组
- 为自动缩放组编写一个用户数据 bash 脚本,该脚本从 S3 中提取 CodeDeploy 代理,安装并启动它
- 设置部署到自动扩展组的 CodeDeploy 部署组
现在,当应用程序包(例如 jar 或 debian 包)部署到部署组时,它将自动部署到在自动扩展组中启动的新实例。
我的问题是:这种部署策略如何与 Travis CI 这样的 CI 工具相适应?
具体来说:
- CodeDeploy 如何获取由 Travis CI 等 CI 工具构建的包?构建作业是否需要将包上传到 S3?
- 如何使用 CodeDeploy 逐步部署应用程序(例如一次一个实例)?
- 这种部署策略是否需要关闭和替换每个正在运行的实例,或者是否将新版本的应用程序部署在现有实例上?如果是前者,在部署过程中机器IP地址会发生变化,那么其他服务如何发现新部署的应用程序(即没有硬编码的IP地址)?