2012-04-19 180 views
18

在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

回答

0

我剛剛考慮過這種場景,雖然我沒有特別考慮Heroku作爲選擇的平臺。總之,這就是我來-了:

  1. 引入請求去「發展」分支
  2. 特拉維斯測試拉的要求爲您
  3. 如果我們要部署什麼是目前在「發展」 - 人類拉入請求,審查和歸併到「發佈/候選人」分支
  4. 特拉維斯測試再次合併
  5. 一旦測試上分支通過 - 讓Travis創建一個針對「發佈/產品」的拉請求(也許編寫GitHub API的包裝以創建實際的拉特請求表單Travis)。
  6. 取決於我們是否真的要部署或不相當,但 - 一個人的合併(成「發行/製作」)或關閉特拉維斯
  7. 創建
  8. 拉入請求有一張部署主機或具有各自的應用程序主機(如果你有很多並且不想擁有SPF)來跟蹤「發佈/製作」分支。

我相信你可以實現一個Heroku應用程序,它可以處理部署主機或更瘋狂的角色。

此外,您可能希望嘗試讓Travis通過IRC通知您,並在您的客戶端擁有另一個可以訪問您個人SSH密鑰並向Heroku推送的IRC bot,還可以實現確認界面通過與您自己的機器人或者腳本GUI界面進行私密對話,並與「繼續!」按鈕。如果你不是那麼老,你可以用Hubot來達到這個目的。

順便說一下,您還可以在上述某些步驟之間引入某種臨時分支或任何您喜歡的東西。您可能還應該使用標籤,回滾會將一個已知的工作標籤推送到「發佈/產品」中,由您的部署程序腳本將其從中取出。

5

我剛剛用我的應用程序實現了這種情況。這其實並不難做到,但它需要一些步驟:

  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

2

這裏是一個版本,我就發現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