18

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

4

4 回答 4

9

Travis CI 现在内置了对部署到 Heroku 的支持:http: //about.travis-ci.org/blog/2013-07-09-introducing-continuous-deployment-to-heroku/

于 2013-07-09T15:12:32.967 回答
5

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

  1. 你需要你的 heroku API 密钥
  2. 请参阅此要点以获取示例.travis.yml并获取travis_deployer.rb脚本
  3. 然后安装 travis gem,查看另一个关于如何保护 API 密钥的问题的答案
    • 如果您不关心它,只需使用上面 gist 中的示例。
    • travis encrypt your_username/your_repo HEROKU_API_KEY=<your key here>
    • 将结果复制到.travis.ymlenv -> global 部分

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
于 2012-10-11T22:33:41.420 回答
2

这是我在Mark Ba​​tes 的博客上找到的版本。它与 Odi 的类似,只是它仅依赖after_script于您的.travis.yml文件中的 。

  1. 首先,使用 Travis 的特性来加密环境变量,这样你的 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。


编辑:如果您遇到任何错误travis encrypt这可能是您的解决方案

于 2012-12-15T06:43:15.370 回答
0

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

  1. 拉取请求转到“开发”分支
  2. Travis 为您测试拉取请求
  3. 如果我们要部署当前“开发”中的内容- 人类拉取请求,审查并将其合并到“发布/候选”分支
  4. 合并后 Travis 再次测试
  5. 一旦该分支的测试通过 - 让 Travis 创建一个针对“发布/生产”的拉取请求(也许为 GitHub API 编写一个包装器,以创建实际的拉取请求表单 Travis)。
  6. 取决于我们是否真的想要部署 - 人工合并(进入“发布/生产”)或关闭从 Travis 创建的拉取请求
  7. 拥有一个部署主机或拥有每个应用程序主机(如果您有很多并且不想拥有 SPF)来跟踪“发布/生产”分支。

我相信你可以实现一个 Heroku 应用程序来处理作为部署主机的角色,或者更疯狂的事情。

此外,您可能希望让 Travis 通过 IRC 通知您,并在您的客户端设置另一个 IRC 机器人,它可以访问您的个人 SSH 密钥并推送到 Heroku,您还可以通过以下方式实现确认界面与您自己的机器人或脚本 GUI 界面进行私人对话,并带有“继续!” 按钮。如果你不是那么老派,你可以使用 Hubot 来达到这个目的。

顺便说一句,您还可以在上述某些步骤之间引入某种暂存分支或任何您喜欢的东西。您可能还应该使用标签,并且回滚只会将已知的工作标签推送到“发布/生产”中,您的部署程序脚本将从那里获取它。

于 2012-05-24T22:53:33.680 回答