【问题标题】:Proper continuous integration and continuous deployment with Git and Heroku使用 Git 和 Heroku 进行适当的持续集成和持续部署
【发布时间】:2011-03-08 19:38:17
【问题描述】:

我正在使用 heroku 和 git 开发一个 ruby​​ on rails 网站。

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

代码 > 签入 > 自动测试 > 自动部署

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

你会怎么做?

【问题讨论】:

  • 我不推荐自动部署,因为你肯定会提交半成品功能,不应该直接上线。
  • +1 关于不在生产环境中执行此操作 - 让您以这种方式自动部署应用程序非常危险。不过,部署到登台服务器会很好。
  • ^^^ 这样就违背了持续部署的目的不是吗?

标签: ruby-on-rails git continuous-integration heroku continuous-deployment


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    作为序言,我是 Codeship (https://codeship.io) 的创始人之一,该服务正好支持这一点。

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

    一次性完成/制作

    每当您推送到您的主分支或特定部署分支时,您都会运行您的测试,如果所有测试都通过,您首先部署到您的暂存应用程序,运行单独的测试(Selenium 或酱实验室非常适合),如果可行包括您推送到生产应用程序的迁移。

    这很棒,因为最新版本始终可以在生产中使用,而且我们现在使用这个周期很长时间了。非常适合我们。不利的一面是,推送到一个临时的 heroku 应用程序需要一些时间。如果您想针对生产数据的副本运行迁移,则需要更多时间。这不是永恒,但需要几分钟。

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

    您可以拥有单独的暂存/生产分支,这些分支部署到相应的 heroku 应用程序。这具有更快的优势,并且您可以控制何时释放某些部分。特别是对于在部署到生产之前需要外部反馈的应用程序,这非常有用。

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

    【讨论】:

    • 这读起来有点像广告“号召性用语”,不适合在这里作为答案。
    • 对不起@AndrewBarber,如果这有点广告,但我想解决一些如何有效地进行持续部署的不同方法。我认为当他特别要求托管提供商(他在下面与 Hudson 一起这样做)时,告诉他一些关于我们服务的信息可能没问题。
    • 我肯定会删除所有与您的联系信息相关的东西;在我看来,这就是将其从有问题推向过度的原因。我不认为您打算发送“垃圾邮件”,而且您是这里的新用户,所以我现在没有标记任何内容。我会做一些我认为修复这篇文章本身的编辑,但我也建议阅读FAQ on Self-Promotion以获得更一般的指导。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      试试Heroku-Bartender。一篇文章here

      【讨论】:

        【解决方案5】:

        我们使用Integrity。这是一个非常简单的解决方案 - 它不会在阳光下做所有事情,但它很容易设置和处理最常见的用例/功能。如果您希望它做更多事情,它也很容易破解。

        完整性状态:

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

        但是:

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

        这是因为您的 Integrity 应用程序需要一个 SSH 密钥。这不是不可能的,但肯定要跳几圈。您需要为 Integrity 提供一个私钥并将其放入应用程序中,然后破解 Integrity 以在启动 git clone 时使用该 ssh 密钥。

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

        不幸的是,我不知道如何执行此操作的详细信息——我们实际上是在 VPS 上运行 Integrity。

        【讨论】:

        • 似乎 Integrity 网站已关闭,他们是不是倒闭了?他们的 DNS 过期了还是什么。?
        • 域名是kaput。
        【解决方案6】:

        嗯,Hudson 提供了一个 git 插件以及脚本支持。剩下的就是配置了,我猜。

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

        【讨论】:

        • 您能推荐任何托管的 hudson 提供商吗?
        • 不,我不认为有某种 hudson 托管,但它很容易设置和配置。你甚至可以在你的开发者盒子上运行它。
        • CloudBees 提供 Jenkins(这是 Hudson 的演变)。他们还提供免费套餐。 cloudbees.com/jenkins-enterprise-by-cloudbees.cb
        猜你喜欢
        • 2016-08-28
        • 1970-01-01
        • 2018-11-16
        • 2015-04-20
        • 1970-01-01
        • 2017-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多