我正在使用Heroku和Git开发一个Ruby on Rails网站。
我应该使用哪些工具和功能来设置以下简单的开发流程?
代码提交 > 自动测试 > 自动部署
- 我将代码提交到代码库(首选项是托管在GitHub等主机上的Git)
- 测试会自动运行,并在我的staging Heroku应用程序上部署网站
- 如果测试通过,则会在我的production Heroku应用程序上自动部署网站
- 如果测试失败,我希望以某种方式得到通知。
您将如何实现这个过程?
我正在使用Heroku和Git开发一个Ruby on Rails网站。
我应该使用哪些工具和功能来设置以下简单的开发流程?
代码提交 > 自动测试 > 自动部署
您将如何实现这个过程?
CircleCi 提供了您所需的功能。我们会在每次推送时运行您的测试,如果测试通过,我们会将其部署(到Heroku或使用Capistrano/Fabric/任何其他方式),如果测试失败,我们会发送通知给您。
首先,我是Codeship(https://codeship.io)的创始人之一,这是一个支持此功能的服务。
但是回到主题,基本上有两种不同的实现方式(请记住,我使用的所有分支名称都是任意的,可以完全不同):
每当您推送到主分支或特定的部署分支时,运行测试,如果所有测试都通过,则首先部署到暂存应用程序,运行单独的测试(Selenium或sauce labs非常适合),如果包括迁移在内都能正常工作,则推送到生产应用程序。
这很棒,因为最新版本始终可用于生产环境,并且我们已经长时间使用了此周期。对我们来说效果非常好。缺点是将应用程序推送到暂存Heroku应用程序需要一些时间。如果要对生产数据的副本运行迁移,则需要更多时间。虽然并不需要太久,但需要几分钟。
您可以拥有单独的暂存/生产分支,这些分支将部署到各自的Heroku应用程序中。这样做的好处是速度更快,您可以控制何时发布某些部分。特别是对于需要在部署到生产环境之前获得外部反馈的应用程序,这非常有效。
我们在Railsonfire上支持所有这些功能,但我们目前正在开发一个更好的服务版本。我们与Heroku集成非常良好,因此您无需考虑任何事情(但仍然可以按照自己的方式进行操作)。
我们使用Integrity。这是一个相当简单的解决方案 - 它不会做所有的事情,但它非常容易设置并处理最常见的用例/功能。如果您想让它做更多的事情,它也很容易被黑客攻击。
Integrity声明:
Heroku是部署Integrity的最简单和最快速的方法。
然而:
注意
在Heroku上无法通过SSH访问存储库
这是因为您的Integrity应用程序将需要一个SSH密钥。这并不是不可能,但肯定需要一些步骤。您需要提供Integrity的私钥并将其放入应用程序中,然后黑客攻击Integrity以在启动git clone
时使用该ssh密钥。
在您列出的事项中,自动部署可能是大多数人不希望他们的CI服务器执行的任务(Integrity没有提供开箱即用)。您需要配置git使用该ssh密钥,并从正确的位置(已检出的存储库)启动git push
。
很遗憾,我不知道如何做到这一点 - 我们实际上在VPS上运行Integrity。
嗯,有Hudson提供了git插件和脚本支持。其他的应该是配置。
Hudson: http://hudson.dev.java.net