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

问题描述:

在travis-ci成功构建之后,有什么办法可以部署heroku rails应用程序?如何在travis-ci上部署heroku上的rails应用程序?

+0

我只是看了看,似乎你可以做一个脚本来安装Heroku的宝石,然后有on_sucess登录另一个脚本,做混帐推heroku高手。关于这个的细节不知道,我只是假设它是可能的 – 2012-04-19 19:45:52

+1

是的!但如何处理travis-ci上的ssh密钥? – danielgatis 2012-04-19 20:28:45

+1

我认为以下答案中的一个值得接受@danielgatis。我在@Odi和@Marius Butuc的答案中使用了相关信息,以实现我的持续部署。我将在此处添加引用,因为我使用的gem需要我在** application.rb **中设置'config.assets.initialize_on_precompile = true',所以我通常必须在手动部署到Heroku之前预编译我的资源。运行'$ heroku实验室:启用用户-env-compile -a YOUR_HEROKU_APP'后,我不需要在我的** .travis.yml **中运行'rake assets:precompile'。我只希望Heroku保持这个功能。 – 2012-12-23 02:06:33

特拉维斯CI现在已经内置支持部署到Heroku的:http://about.travis-ci.org/blog/2013-07-09-introducing-continuous-deployment-to-heroku/

我刚刚考虑过这种场景,虽然我没有特别考虑Heroku作为选择的平台。总之,这就是我来-了:

  1. 引入请求去“发展”分支
  2. 特拉维斯测试拉的要求为您
  3. 如果我们要部署什么是目前在“发展” - 人类拉入请求,审查和归并到“发布/候选人”分支
  4. 特拉维斯测试再次合并
  5. 一旦测试上分支通过 - 让Travis创建一个针对“发布/产品”的拉请求(也许编写GitHub API的包装以创建实际的拉特请求表单Travis)。
  6. 取决于我们是否真的要部署或不相当,但 - 一个人的合并(成“发行/制作”)或关闭特拉维斯
  7. 创建
  8. 拉入请求有一张部署主机或具有各自的应用程序主机(如果你有很多并且不想拥有SPF)来跟踪“发布/制作”分支。

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

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

顺便说一下,您还可以在上述某些步骤之间引入某种临时分支或任何您喜欢的东西。您可能还应该使用标签,回滚会将一个已知的工作标签推送到“发布/产品”中,由您的部署程序脚本将其从中取出。

我刚刚用我的应用程序实现了这种情况。这其实并不难做到,但它需要一些步骤:

  1. 你需要your heroku API key
  2. this gist for an example .travis.yml and get the travis_deployer.rb script
  3. 然后安装特拉维斯宝石,看到answer to another question on how to secure your API key
    • 如果你不关心它,只需使用上面的要点。
    • 运行travis encrypt your_username/your_repo HEROKU_API_KEY=<your key here>
    • 复制的结果在你的.travis.yml在ENV - >全局部分

travis_deployer.rb文件采用SSH密钥和Heroku的远程分支的照顾。

如果您已经执行了所有这些步骤你.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 
+0

您应该将'after_script'更改为'after_success'或风险部署破坏的代码。 – Ivan 2013-04-23 07:41:09

+0

@Ivan:好的,我相应地编辑了我的答案。谢谢! – Odi 2013-04-23 11:31:09

+0

我最终使用这个,除了而不是做一个键:清除我在最后添加了这个: ' - 为我在$(grep'[^ \] * $'〜/ .ssh/id_rsa.pub -o);做heroku密钥:删除$我;完成' 这应该简单地删除新添加的密钥,没有别的。这意味着如果您使用此帐户进行本地开发,则不必为每次部署添加密钥。 – Ryan 2013-06-11 04:34:57

这里是一个版本,我就发现Mark Bates' blog。这与Odi's很相似,只是它依靠仅在.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 [email protected]: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 encryptthis might be your solution任何错误。

+0

我可以做些什么来提供它的要求?当特拉维斯解析我的'.travis。yml'并获取到heroku密钥:清除,我看到以下代码,我不知道如何提供电子邮件 'heroku-cli:安装CLI ... 22.44MB/22.44MB 输入您的Heroku证书。 电子邮件:'' – 2016-10-08 20:00:55