使用CodeDeploy和CI工具部署分布式应用程序的好方法是什么?

Jos*_*osh 5 cloud deployment amazon-web-services travis-ci aws-code-deploy

使用AWS时,将应用程序部署到新创建的实例的一种好方法似乎是通过AWS CodeDeploy。其工作原理如下:

  1. 为应用程序设置一个自动扩展组
  2. 为自动扩展组编写一个用户数据bash脚本,该脚本会将CodeDeploy代理从S3中拉出,安装并启动它
  3. 设置一个CodeDeploy部署组,该组将部署到自动伸缩组

现在,当将应用程序捆绑包(例如jar或debian软件包)部署到部署组时,它将自动部署到在自动扩展组中启动的新实例。

我的问题是:这种部署策略如何适合Travis CI等CI工具?

特别:

  • CodeDeploy如何获取由Travis CI等CI工具构建的软件包?构建作业是否需要将软件包上传到S3?
  • 如何使用CodeDeploy逐步部署应用程序(例如一次部署一个实例)?
  • 此部署策略是否需要关闭并替换每个正在运行的实例,还是在现有实例上部署了新版本的应用程序?如果是前者,则机器IP地址将在部署期间更改,那么其他服务如何发现新部署的应用程序(即没有硬编码的IP地址)?

Jon*_*pie 4

TL;博士版本:

  • 构建作业需要将包上传到S3。
  • 使用一次一个部署配置。
  • 新版本的应用程序部署在现有实例上。

好的,这是长版本:

我建议您尝试部署演练或查看文档中的概念。它应该可以帮助您更快地熟悉 CodeDeploy。

如果您不愿意,则不必将 AutoScaling 组与 CodeDeploy 结合使用。与 AutoScaling 集成的 CodeDeploy 允许您独立于部署到它们的代码来管理需要动态更改大小的队列,但这不是使用 CodeDeploy 的要求。您还可以手动启动一些 EC2 实例,安装主机代理,然后将它们标记到部署组中 - 但它们不会像 AutoScaling 实例那样在启动时自动部署。无论哪种情况,您始终可以创建舰队范围的部署。

您必须做一些工作才能将其与 CI 工具集成。CodeDeploy 不直接管理您的构建工件,因此您的构建过程需要这样做。要进行自动部署,您需要:

  1. appspec.yml使用、处理安装/升级所需的任何脚本以及构建工件创建存档包。
  2. 将捆绑包上传到 S3。
  3. 在 CodeDeploy 中创建部署。

您可能希望将CodePipeline视为与 CodeDeploy 集成的持续交付系统的示例。

CodeDeploy 使用部署配置来控制其部署到队列中的实例的积极程度。(对于自动部署,此配置将被忽略,因为每个实例都是单独处理的。)如果 CodeDeploy 无法在不违反部署配置中的约束的情况下使另一个实例失败,则它将使您的部署失败并停止部署到新实例。

共有三个内置部署配置,如果需要不同的配置,您可以通过 CLI 或API创建自己的部署配置。要一次仅部署到一个实例,您可以使用CodeDeployDefault.OneAtATime部署配置,该配置在任何给定时间最多允许一台不健康的主机。