使用Git和Heroku实现适当的持续集成和持续部署

12

我正在使用Heroku和Git开发一个Ruby on Rails网站。

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

代码提交 > 自动测试 > 自动部署

  • 我将代码提交到代码库(首选项是托管在GitHub等主机上的Git)
  • 测试会自动运行,并在我的staging Heroku应用程序上部署网站
  • 如果测试通过,则会在我的production Heroku应用程序上自动部署网站
  • 如果测试失败,我希望以某种方式得到通知。

您将如何实现这个过程?


1
我不建议自动部署,因为你很可能会提交一些未完成的功能,这些功能不应该直接上线。 - ZeissS
在生产环境中不要这样做,这样做非常危险,因为你的应用程序会自动部署。但是部署到一个暂存服务器上是可以的。 - Codebeef
7
这似乎有些违背持续部署的初衷,不是吗? - mwjackson
6个回答

5

CircleCi 提供了您所需的功能。我们会在每次推送时运行您的测试,如果测试通过,我们会将其部署(到Heroku或使用Capistrano/Fabric/任何其他方式),如果测试失败,我们会发送通知给您。


2

首先,我是Codeship(https://codeship.io)的创始人之一,这是一个支持此功能的服务。

但是回到主题,基本上有两种不同的实现方式(请记住,我使用的所有分支名称都是任意的,可以完全不同):

同时进行暂存/生产环境

每当您推送到主分支或特定的部署分支时,运行测试,如果所有测试都通过,则首先部署到暂存应用程序,运行单独的测试(Selenium或sauce labs非常适合),如果包括迁移在内都能正常工作,则推送到生产应用程序。

这很棒,因为最新版本始终可用于生产环境,并且我们已经长时间使用了此周期。对我们来说效果非常好。缺点是将应用程序推送到暂存Heroku应用程序需要一些时间。如果要对生产数据的副本运行迁移,则需要更多时间。虽然并不需要太久,但需要几分钟。

分别进行暂存/生产环境

您可以拥有单独的暂存/生产分支,这些分支将部署到各自的Heroku应用程序中。这样做的好处是速度更快,您可以控制何时发布某些部分。特别是对于需要在部署到生产环境之前获得外部反馈的应用程序,这非常有效。

我们在Railsonfire上支持所有这些功能,但我们目前正在开发一个更好的服务版本。我们与Heroku集成非常良好,因此您无需考虑任何事情(但仍然可以按照自己的方式进行操作)。


这篇文章读起来有点像广告“号召行动”,不太适合作为这里的答案。 - Andrew Barber
抱歉@AndrewBarber,如果这篇文章有点像广告,但我想讨论一下如何有效地进行持续部署的几种不同方式。我认为,由于他特别要求托管提供商(他在下面提到了Hudson),告诉他一些关于我们服务的信息可能是可以的。 - Florian Motlik
我肯定会摆脱所有与您的联系信息相关的东西;在我看来,这就是将其从可疑推向过度的原因。我不认为您有意进行“垃圾邮件”行为,而且您是一个新用户,所以我现在不会标记任何内容。我会进行一些编辑,以修复本帖子本身,但我也建议阅读自我推广的常见问题解答以获取更一般的指导。 - Andrew Barber

1

我们使用Integrity。这是一个相当简单的解决方案 - 它不会做所有的事情,但它非常容易设置并处理最常见的用例/功能。如果您想让它做更多的事情,它也很容易被黑客攻击。

Integrity声明:

Heroku是部署Integrity的最简单和最快速的方法。

然而:

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

这是因为您的Integrity应用程序将需要一个SSH密钥。这并不是不可能,但肯定需要一些步骤。您需要提供Integrity的私钥并将其放入应用程序中,然后黑客攻击Integrity以在启动git clone时使用该ssh密钥。

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

很遗憾,我不知道如何做到这一点 - 我们实际上在VPS上运行Integrity。


1
好像Integrity网站挂了,他们倒闭了吗?他们的DNS过期了还是怎么回事? - Kamilski81
该域名已失效。 - The Onin

1
市场上有许多可实现此功能的工具。SnapCI提供部署流水线,可通过测试将每个提交推送到不同的部署流水线阶段,如预发布和生产。我们还全面支持测试并行化、构建分支和拉取请求。

0

0

你能推荐一些托管Hudson的服务提供商吗? - Aymeric
不,我认为没有某种类型的Hudson托管服务,但是它很容易设置和配置。你甚至可以在你的开发者电脑上运行它。 - ZeissS
CloudBees提供Jenkins(这是Hudson的进化版本)。他们还提供免费层。http://www.cloudbees.com/jenkins-enterprise-by-cloudbees.cb - Juanda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接