3

我正在从 Capistrano 转移到 Chef 以部署 Rails 应用程序(使用deploy_revision),我不清楚最佳实践(或常见实践)的问题。通过谷歌搜索,我没有找到太多东西。

使用 Capistrano 和“推送”模型,在跨多个服务器部署应用程序时,可以直接识别何时出现部署失败并立即在所有服务器上回滚部署。Capistrano 还在每个应用服务器上建立了一个维护页面,然后不会关闭该维护页面,除非我已成功部署到所有服务器或回滚部署。

使用 Chef 和“拉”模型,每台服务器可能会在稍有不同的时间获取其更新。我可能会比应用程序服务器提前几分钟更新应用程序代码并运行数据库迁移。所以我真的没有很好的方法来识别故障并确保构建回滚到最后一个成功部署的版本(在所有服务器上)。

我知道我在这里有一些选择:

  1. 不要守护厨师客户端。使用 cron 每晚或每小时运行一次。(如果有些服务器成功并且只有一个遇到问题,我仍然无法回滚我的所有服务器。)
  2. 不要守护厨师客户端。不要使用 deploy_revision。通过knife sshcapistrano-chef运行它。(我现在回到“推”模型而不是“拉”模型,这是 Chef 吸引力的一部分。)
  3. 守护厨师客户并编写相互交谈的自定义食谱。(对此不感兴趣。)
  4. 放松。别担心。让错误发生,然后修复它们。(这里也不激动。)

我可以开始构建其中任何一个,但在我投入大量时间构建之前,我希望了解在该领域的大型部署中什么是有效的。你做了什么?

4

2 回答 2

3

Pull 适用于解决配置漂移问题。对于按需部署(和潜在的回滚),推送更好。看看这些(我没用过):

https://github.com/etsy/deployinator

http://www.rackspace.com/blog/rackspace-open-sources-dreadnot/

于 2013-01-09T05:56:18.913 回答
1

我已经通过 Chef 的 deploy_revision 策略部署了 ROR 应用程序并取得了一些成功。要克服拉取策略的时序控制限制,最简单的方法是编写一个部署脚本,归结为:

  • 停止 chef-client(以确保守护进程不处理事情)
  • 手动运行 chef-client(这也将重新启动守护进程)

或者,如果您很懒惰,只需运行chef-client,不要担心守护程序。

然后用于knife-ssh在适用的节点上执行这些命令。最终结果是您的所有与部署相关的配置都由厨师管理,但您可以根据需要启动部署。

对于奖励积分,将所有这些打包在 Jenkins 任务中。您需要将 jenks 配置为 Chef 客户端,并在您的应用程序项目中执行“部署到暂存”任务。现在您可以单击运行任务,您的不会说厨师的队​​友可以轻松地进行部署。为了获得更多奖励积分,设置 jenkins 以在成功构建后自动部署!

于 2013-03-01T20:02:56.557 回答