【问题标题】:How to sync compiled code to multiple EC2 instances如何将编译后的代码同步到多个 EC2 实例
【发布时间】:2011-07-16 07:25:30
【问题描述】:

我们在负载均衡器后面有多个 EC2 实例。每台服务器都部署了多个 ASP.NET 应用程序。我正在寻找一种简单、实时、自动化的方式来同时将新的编译代码部署到所有实例。

我见过使用 SVN 或 Git 等源代码控制存储库的解决方案,但这似乎不适合我们使用该技术,因为我们将编译后的代码部署到 EC2 实例 - 而不是源代码。

我还设置了Dropbox 来完成同步。它有点工作,但有它的怪癖。例如,您需要围绕“一个根同步文件夹”限制构建目录结构。我们绝对不应该为此使用 Dropbox 的任何其他原因?

使用 S3 API 编写自定义应用程序是一种选择,但我们更喜欢第三方解决方案而不是编写更多代码。

这似乎是一种常见的情况,但我还没有找到任何好的解决方案。

【问题讨论】:

    标签: c# deployment amazon-s3 amazon-ec2


    【解决方案1】:

    Elastic Beanstalk 似乎是现在最好的路线。您只需将 Web 部署项目推送到弹性 beanstalk 环境,它就会将代码部署到您的所有实例。 (它为您管理自动扩展。)它还确保启动的新实例将为您提供最新代码,并保留您可以轻松回滚到的先前版本。

    如果您的 asp.net 网站需要在 AWS 上自动扩展,Elastic Beanstalk 确实是最好的端到端解决方案。

    【讨论】:

    • 如果您更喜欢在普通的 EC2 服务器上工作怎么办?在 EC2 服务器上设置 Auto-scaling 并不难。
    • @digitaldavenyc,这很容易做到,但弹性豆茎也是如此。自动缩放是您通过弹性 beantalk 免费获得的功能的一个子集。您还可以从自动缩放事件以及代码部署部分获得通知。
    • AWS Code Deploy aws.amazon.com/codedeploy 只是 beanstalk 的部署部分。问题是你想做什么?如果它运行一个 Web 应用程序,我不知道你为什么不使用 beanstalk。如果它运行的是命令行应用程序,那么是的,beantalk 可能不会为您执行此操作,但 beanstalk 上的工作层可能会有所帮助docs.aws.amazon.com/elasticbeanstalk/latest/dg/…
    • 我不会使用 beanstalk,因为出于各种原因最终需要进入服务器上的系统管理级别。这需要经常发生。在 EB 上执行此操作实际上是不可能的,因为应用程序是在新部署到 EB 时重建的,从而消除了您的系统管理员更改。
    • @digitaldavenyc 不太确定您具体在说什么。您可以在 EB 中使用自定义 AMI。如果您使用的是 linux,而不是使用自定义 AMI,您可能应该将 docker 与 EB 一起使用:docs.aws.amazon.com/elasticbeanstalk/latest/dg/… 您说您在每次部署后都在修改代码,那么您只需要更好的部署总体策略。最后,它们只是服务器,您可以随时通过 ssh 或 rdp 访问它们。
    【解决方案2】:

    既然这些是 ASP.Net 应用程序和 IIS,为什么不使用 Web 部署。专为此而生。

    http://www.iis.net/download/webdeploy

    Web Deploy 允许您通过检测源内容和目标内容之间的差异并仅传输那些需要同步的更改,从而有效地跨 IIS 7.0 服务器场同步站点、应用程序或服务器。该工具通过自动确定要为特定站点同步的配置、内容和证书来简化同步过程。除了默认行为之外,您还可以选择为同步指定其他提供程序,包括数据库、COM 对象、GAC 程序集和注册表设置。

    【讨论】:

    • 这里的问题是 web deploy 需要知道你的服务器的 IPs 才能部署到它们。对于自动扩展的实例,这并不容易——您不知道自动启动的实例的公共 IP。看起来您需要使用 AWS API 以某种方式获取此信息
    【解决方案3】:

    您可以使用 Git、Mercurial 或 SVN 将编译后的代码推送到服务器,或让服务器获取代码。源代码控制不仅适用于源代码 - 它可以用于任何类型的文件。

    此外,解决 Dropbox 问题的一种方法是使用多个 DropBox 帐户(如果这是问题)。但是 Dropbox 是一个非常简单的解决方案,因为这样您就不需要编写任何代码。只要 Dropbox 启动,它就会工作。

    【讨论】:

      【解决方案4】:

      您可能想试试AppHarbor。我们负责管理 ASP.NET 应用程序服务器、负载平衡器和所有其他必需的基础设施,让您继续开发应用程序。我们还为您提供了一种方便的方式来使用您选择的 Git、Mercurial、Subversion 和 TFS 来推送您的应用的新版本。

      【讨论】:

        【解决方案5】:

        Git 或 mercurial 会做得很好,颠覆不擅长处理 blob。

        而且您可以很好地控制和保证,通过查看修订,代码被部署到各处。

        【讨论】:

          【解决方案6】:

          看起来很明显,但是共享文件系统?还是用 scp 或 rsync 推出?

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-11-02
            • 2023-04-01
            相关资源
            最近更新 更多