使用Git和Heroku进行适当的持续集成和持续部署

我正在使用heroku和git在rails网站上开发ruby。

我应该使用哪些工具和function来设置以下简单的开发过程?

CODE> CHECK-IN> AUTO TEST> AUTO DEPLOY

  • 我将我的代码检入我的存储库(首选选项,托管git,如github)
  • 测试自动运行并在我的staging heroku应用程序中部署网站
  • 如果测试通过,网站将自动部署在我的生产heroku应用程序上
  • 如果测试失败,我想以某种方式得到通知。

你会怎么做?

我们使用Integrity 。 这是一个非常简单的解决方案 – 它不会在阳光下完成所有工作,但是设置和处理最常见的用例/function非常容易。 如果你想让它做得更多,它也很容易被攻击。

诚信说明:

Heroku是部署Integrity的最简单,最快捷的方式。

然而:

注意
在Heroku上无法通过SSH访问存储库

这是因为您的Integrity应用程序需要SSH密钥。 这并非不可能,但绝对可以通过几个环节来跳过。 您需要为Integrity提供一个私钥并将其放入应用程序,然后破解Integrity在启动git clone时使用该密钥。

在您列出的内容中,自动部署可能是大多数人不希望他们的CI服务器做的事情(并且Integrity不提供开箱即用)。 您需要配置git以使用该ssh密钥并从正确的位置(已检出的存储库)启动git push

不幸的是我不知道如何做到这一点的细节 – 我们实际上在VPS上运行Integrity。

CircleCi提供您所需要的。 我们将在每次推送时运行测试,如果它们通过(到Heroku或使用Capistrano / Fabric /任何东西),则部署它们,并在它们失败时向您发送通知。

前言我是Codeship( https://codeship.io )的创始人之一,这是一项支持这一点的服务。

但更多关于主题,基本上有两种不同的方式我认为这可以实现(请记住,我使用的所有分支名称都是任意的,可以命名完全不同):

一次性进行分期/生产

无论何时推送到主服务器或特定的部署分支,您都可以运行测试,如果所有测试都通过,您首先部署到您的临时应用程序,运行单独的测试(Selenium或酱实验室非常适合),如果这样做包括迁移,那么推送到您的生产应用程序。

这很好,因为最新版本始终可以在生产中使用,我们现在使用这个循环很长一段时间。 对我们很有用。 缺点是推送到临时heroku应用程序需要一些时间。 如果要针对生产数据的副本运行迁移,则需要更多时间。 这不是永恒,但需要几分钟。

分期/生产作为单独的步骤

您可以拥有单独的登台/生产分支,这些分支部署到相应的heroku应用程序。 这样做的好处是速度更快,您可以控制何时释放某些部件。 特别是对于在部署到生产之前需要外部反馈的应用程序,这非常有效。

我们在Railsonfire上支持所有这些,但我们正在开发一种新版本的服务,这种方式更好。 我们与Heroku很好地集成,因此您不必考虑这一点(但仍可以选择以您想要的任何方式自行完成)

市场上有很多工具可以做到这一点。 SnapCI提供了部署管道 ,允许您通过测试推送每个提交,然后作为部署管道的不同阶段进行分段和生产。 我们还完全支持测试并行化,构建分支和拉取请求。

好吧,Hudson提供了一个git插件以及脚本支持。 其余的是配置,我猜。

哈德森: http : //hudson.dev.java.net

试试Heroku-Bartender 。 在这里写一篇文章。

Interesting Posts