【问题标题】:Mitigating the risks of auto-deployment降低自动部署的风险
【发布时间】:2014-05-07 03:59:18
【问题描述】:

部署

我目前在一家通过 github 部署的公司工作。但是,我们必须登录所有 3 个服务器才能使用 shell 脚本手动更新它们。在与 CTO 交谈时,他非常明确地表示,自动部署对他来说就像巫术一样。这是可以理解的。我们有 4 个不同国家的开发人员进行远程工作。如果有人意外推送到错误的分支,我们可能会遇到停机时间,而我们的服务不会超过 10 分钟。由于我们所有的开发人员都在不同的时区,我们的 CTO 直到第二天早上才能知道,而且由于时差很大,我们很难与遇到问题的开发人员会面。

我的问题:我为什么要自动部署

在处理我的个人项目时,我认为使用自动部署可能符合我的最大利益,但我的项目仍然是关键任务,我希望尽可能减少停机时间和人为错误 。手动部署的问题在于,我根本无法在合理的时间内通过 SSH 手动部署多达 20 台服务器。当我考虑自动缩放时,问题仍然存在。我需要从映像启动新服务器并部署到它。

我的堆栈

我的服务是在 Node.js Express 框架上开发的。这些环境具有非常丰富的部署和引导实用程序。我的项目在部署时使用 npm 的 package.json 到 uglify 我的脚本,并且还使用 forever-monitor 作为守护进程运行我的服务。我还在考虑使用grunt.js 进一步引导我的生产环境和测试环境。

部署方法

到目前为止我已经考虑过:

  • 使用 git 自动部署,使用 webhook
  • 通过 shell 使用 git 手动部署
  • 通过 shell 使用 npm 部署
  • 码头工人

我不太精通 Docker 等技术,但我很感兴趣,而且我肯定会给那些给我很好的描述我为什么应该或不应该使用 Docker 的人打分,因为我非常对它的使用感兴趣。欢迎使用其他方法。

我的问题:为什么我害怕自动部署

在任务关键型环境中,停机可能会使您的业务暂停,更糟糕的是,有一群最终用户在点击刷新按钮。如果有人将未构建的东西推送到生产分支并自动部署,那么我正在寻找一个非常混乱的情况。

我喜欢自动部署的优雅,但风险让我怀疑。我非常赞成让自己尽可能高效。因此,我正在寻找一种方法可以轻松、高效地部署到多台服务器。

我正在寻找的答案

向我解释如何降低自动部署的风险,向我解释更适合我的项目的替代方案。请随时询问 cmets 中缺少的任何详细信息。

【问题讨论】:

  • 您考虑过semi-auto 部署吗?即在每个服务器上创建一个监听器,当pinged 时,它将在服务器上运行更新脚本。这样就可以检查构建是否通过,如果确定可以一键部署到所有服务器?
  • 我已经考虑过一些类似的事情。持续集成在这里有用吗?
  • 是的,可以。首先部署在您的登台服务器上,在那里进行测试,如果通过,然后自动部署到生产环境。
  • @alex 这就是想法。我的 git 存储库中有一个暂存和生产分支。问题是如果有人在制作修补程序并推送之前忘记“git checkout staging”,那么它会自动将未经测试的代码部署到我的生产服务器。
  • 也许将您的生产分支移动到任何人都无法使用的另一个 git 存储库,并仅从暂存服务器提交?

标签: node.js git deployment npm


【解决方案1】:

这里没有简单的答案。我提供一组由 Etsy 的 Mike Brittain 发布的幻灯片,Etsy 是一家实践持续部署的公司:

http://www.slideshare.net/mikebrittain/mbrittain-continuous-deploymentalm3public

精选集锦:

  • 频繁小批量部署
  • 使用配置/功能标志来控制系统行为和“暗版”主要功能
  • 对生产分支的所有更改进行代码审查
  • 投资于监控并改进反馈循环
  • 将“服务”与“应用程序”分开管理,并注意运行时版本和向后兼容的更改。

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多