如何从travis-ci在heroku上部署rails应用程序?

时间:2012-04-19 19:05:19

标签: ruby-on-rails heroku continuous-integration travis-ci

在travis-ci成功构建后,有什么方法可以部署heroku rails应用程序吗?

4 个答案:

答案 0 :(得分:9)

答案 1 :(得分:5)

我刚用我的应用程序实现了这个案例。实际上并不难,但它需要一些步骤:

  1. 您需要your heroku API key
  2. 请参阅this gist for an example .travis.yml and get the travis_deployer.rb script
  3. 然后安装travis gem,请参阅answer to another question on how to secure your API key
    • 如果你不关心它,只需使用上面的gist中的例子。
    • 运行travis encrypt your_username/your_repo HEROKU_API_KEY=<your key here>
    • 将结果复制到env中的.travis.yml - &gt;全球部分
  4. travis_deployer.rb文件负责heroku的ssh密钥和远程分支。

    如果您执行了所有这些步骤,则.travis.yml可能如下所示:

    env:
      global:
        - secure: "1u21hjnmHjkghduUIJhhs76saljlkajdlfhGhgdJgfaVtgasfLLmNBnb87dad="
    
    after_success:
      - gem install heroku
      - yes | ruby travis_deployer.rb
      - heroku keys:clear
      - yes | heroku keys:add
      - git push heroku master
    

答案 2 :(得分:2)

这是我在Mark Bates' blog上找到的版本。它与Odi类似,只是它依赖于after_script文件中的.travis.yml

  1. 首先,将Travis的功能用于encrypt environment variables,以便您的秘密API密钥保持受保护状态:

    gem install travis
    travis encrypt username/repository HEROKU_API_KEY=YOUR_HEROKU_API_KEY
    
  2. 然后将以下内容附加到.travis.yml文件中:

    env:
      global:
        - secure: YOUR_SECURED_HEROKU_API_KEY
    after_script:
      # Install the Heroku gem (or the Heroku toolbelt)
      - gem install heroku
      # Add your Heroku git repo:
      - git remote add heroku git@heroku.com:YOUR_HEROKU_APP.git
      # Turn off warnings about SSH keys:
      - echo "Host heroku.com" >> ~/.ssh/config
      - echo "   StrictHostKeyChecking no" >> ~/.ssh/config
      - echo "   CheckHostIP no" >> ~/.ssh/config
      - echo "   UserKnownHostsFile=/dev/null" >> ~/.ssh/config
      # Clear your current Heroku SSH keys:
      - heroku keys:clear
      # Add a new SSH key to Heroku
      - yes | heroku keys:add
      # Push to Heroku!
      - yes | git push heroku master
    
  3. 您已完成:提交您的新更改并享受通过TravisCI部署到Heroku。


  4. 修改:如果您在travis encryptthis might be your solution上收到任何错误。

答案 3 :(得分:0)

我刚刚考虑过这种情况,虽然我没有特别考虑Heroku作为选择的平台。无论如何,这就是我的想法:

  1. 拉请求转到“development”分支
  2. Travis测试拉动请求
  3. 如果我们要部署“develop”当前的内容 - 人类提取请求,审核并合并到“release / candidate”分支
  4. Travis在合并后再次测试
  5. 一旦对该分支进行测试 - 让Travis创建一个针对“release / production”的拉取请求(也许为GitHub API编写一个包装器,用于创建Travis的实际拉取请求)。
  6. 取决于我们是否真的想要部署或者还没有 - 人类合并(进入“发布/生产”)或关闭从Travis创建的拉取请求
  7. 拥有部署主机或拥有每个应用程序主机(如果您有许多并且不想拥有SPF)来跟踪“发布/生产”分支。
  8. 我相信你可以实现一个Heroku应用程序来处理作为部署主机或更疯狂的角色。

    此外,您可能希望尝试让Travis通过IRC通知您,并在您的客户端设置另一个IRC bot,它可以访问您的个人SSH密钥并推送到Heroku,您也可以在那里实现确认界面通过与您自己的机器人或脚本化GUI界面进行私人对话,并使用“Go ahead!”按钮。如果你不是那么老派,你可以为此目的使用Hubot。

    顺便说一句,您还可以在上述某些步骤之间引入某种分段分支或任何您喜欢的分支。你可能也应该使用标签,回滚只是将一个已知的工作标签推送到“发布/生产”,它将从你的部署者脚本中获取。