【发布时间】: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