如何从travis-ci在heroku上部署rails应用程序?
在travis-ci成功构建之后,有什么方法可以部署heroku rails应用程序吗?
Travis CI现在已经内置支持部署到Heroku: http : //about.travis-ci.org/blog/2013-07-09-introducing-continuous-deployment-to-heroku/
我刚用我的应用程序实现了这个案例。 它实际上并不难,但它需要一些步骤:
- 你需要你的heroku API密钥
- 请参阅此要点以获取示例
.travis.yml
并获取travis_deployer.rb
脚本 - 然后安装travis gem,查看有关如何保护API密钥的另一个问题的答案 。
- 如果你不关心它,只需使用上面的gist中的例子。
- 运行
travis encrypt your_username/your_repo HEROKU_API_KEY=
- 将结果复制到env – > global部分的
.travis.yml
中
travis_deployer.rb
文件负责travis_deployer.rb
的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
这是我在Mark Bates的博客上找到的版本。 它与after_script
类似,只是它依赖于.travis.yml
文件中的.travis.yml
。
-
首先,使用Travis的function加密环境变量,以便保护您的秘密API密钥:
gem install travis travis encrypt username/repository HEROKU_API_KEY=YOUR_HEROKU_API_KEY
-
然后将以下内容附加到
.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
-
并且您已完成:提交您的新更改并享受通过TravisCI部署到Heroku。
编辑:如果您在travis encrypt
遇到任何错误, 这可能是您的解决方案 。
我刚刚考虑过这种情况,虽然我没有特别考虑Heroku作为选择的平台。 无论如何,这就是我的想法:
- 拉请求转到“开发”分支
- Travis为您测试拉取请求
- 如果我们即将部署当前正在“开发”的东西 – 人类拉动请求,审查并将其合并到“发布/候选”分支
- 一旦合并,特拉维斯再次测试
- 一旦对该分支的测试通过 – 让Travis创建一个针对“发布/生产”的拉取请求(也许为GitHub API编写一个包装器,用于创建Travis的实际拉取请求)。
- 取决于我们是否真的想要部署或者还没有 – 人类合并(进入“发布/生产” )或关闭从Travis创建的拉取请求
- 拥有部署主机或拥有每个应用程序主机(如果您有许多并且不想拥有SPF)来跟踪“发布/生产”分支。
我相信你可以实现一个Heroku应用程序来处理作为部署主机或更疯狂的角色。
此外,您可能希望尝试让Travis通过IRC通知您,并在您的客户端有另一个IRC bot,它可以访问您的个人SSH密钥并推送到Heroku,您也可以通过它实现一个确认界面与您自己的机器人或脚本化GUI界面进行私密对话,并带有“Go ahead!” 按钮。 如果你不是那么老派,你可以将Hubot用于此目的。
顺便说一句,您还可以在上述某些步骤之间引入某种分段分支或任何您喜欢的分支。 您可能还应该使用标记,并且回滚只会将已知的工作标记推送到“发布/生产”中,然后由部署程序脚本将其拾取。