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

标签 amazon-web-services deployment cloud travis-ci aws-code-deploy

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

  • 为应用程序设置自动伸缩组
  • 为自动缩放组编写一个用户数据 bash 脚本,该脚本从 S3 中提取 CodeDeploy 代理,安装并启动它
  • 设置部署到自动扩展组的 CodeDeploy 部署组

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

    我的问题是:这种部署策略如何与像 Travis CI 这样的 CI 工具相适应?

    具体来说:
  • CodeDeploy 如何获取由像 Travis CI 这样的 CI 工具构建的包?构建作业是否需要将包上传到 S3?
  • 如何使用 CodeDeploy 逐步部署应用程序(例如,一次部署一个实例)?
  • 这种部署策略是否需要关闭并更换每个正在运行的实例,还是在现有实例上部署新版本的应用程序?如果是前者,机器IP地址在部署过程中会发生变化,那么其他服务如何发现新部署的应用程序(即没有硬编码的IP地址)?
  • 最佳答案

    tl;博士版本:

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


  • 好的,这是长版:

    我建议你试试 Deployment Walkthrough或查看 Concepts在文档中。它应该可以帮助您更快地熟悉 CodeDeploy。

    如果您不想,您不必将 AutoScaling 组与 CodeDeploy 一起使用。 CodeDeploy 与 AutoScaling 集成允许您管理需要动态更改大小的队列与部署到它们的代码分开,但这不是使用 CodeDeploy 的要求。您还可以手动启动一些 EC2 实例,安装主机代理,然后将它们标记到部署组中 - 但它们不会像 AutoScaling 实例那样在启动时自动部署。在任一情况下,您始终可以创建机群范围的部署。

    您必须做一些工作才能将其与 CI 工具集成。 CodeDeploy 不直接管理您的构建工件,因此您的构建过程需要这样做。要进行自动部署,您需要:
  • 创建一个带有 appspec.yml 的归档包、处理安装/升级所需的任何脚本以及构建工件。
  • 将包上传到 S3。
  • 在 CodeDeploy 中创建部署。

  • 您可能想查看 CodePipeline作为与 CodeDeploy 集成的持续交付系统的示例。

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

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

    关于amazon-web-services - 使用 CodeDeploy 和 CI 工具部署分布式应用程序的好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32635428/

    相关文章:

    ruby-on-rails - 如何在 digital ocean 上一键部署rails app?

    cloud - CaaS 是某种类型的 PaaS 吗?

    database - 审计数据的云存储有哪些好的选择? (连续写,很少查询)

    amazon-web-services - AWS EC2 Ubuntu 14.04 实例时钟提前 12 分钟运行

    amazon-web-services - AWS Cloudfront 级别的 SSL 卸载

    deployment - 如何使用 gulp 递归复制目录?

    cloud - 分布式互斥锁

    java - 实例ID不存在

    amazon-web-services - 无法通过 cloudformation 设置 cognito 用户池客户端的属性

    deployment - Kubectl create 用于持久存储出错