2013-05-30 79 views
9

所有人都知道讓Jenkins和Heroku一起玩的很好嗎?通過Jenkins推送到Heroku的教程

我想要做的事情: 1)想要設置一個jenkins的工作來輪詢一個私人的GitHub Repo,當檢查到開發者分支。 2)建立這個分支,並確保一切都很好! 3)將私人GitHub Repo代碼庫推送到Heroku Repo。所以它在Heroku上構建和部署。

我已經看過一些文章,但似乎無法獲得完整的工作流程。我試過GitHub插件& Heroku插件。我可以讓github插件下拉並構建,但不知道如何推到Heroku。 Heroku插件允許我部署WAR文件,但不能正確顯示應用程序。因此,我需要將代碼庫推送到Heroku Repo,以便進行編譯和部署。

感謝, d

回答

12

我用詹金斯推送到Heroku的爲我們的應用程序。我不使用Heroku插件,我喜歡'Execute Shell'給我的控件。這是一個相當詳細的答案,如果我錯過了任何可以肯定的評論。

1)投票私人回購:

  • 你的工作,應建立與選項「建設當變化 推到GitHub上」下的「構建觸發器」部分。
  • 在GitHub上轉到您的項目頁面,然後單擊 標題中的設置菜單(必須具有管理員訪問權限)。在該頁面的左側邊欄中,點擊「服務掛鉤」。 這將帶您到您可以選擇的掛鉤列表。選擇'Jenkins(GitHub插件)'。
  • 添加jenkins服務器的回調URL(稍後打開該頁面)。喜歡的東西:

    http://jenkins.example.com/github-webhook/

  • 您可以通過添加從詹金斯一個「日誌記錄」,前往詹金斯測試回調|管理詹金斯|系統日誌。點擊「添加新日誌記錄」
  • 輸入「test鉤」,載記錄器「com.cloudbees.jenkins.GitHubWebHook」,將日誌級別設置爲「所有」
  • 回到GitHub上,並點擊「測試掛鉤」 ,你可以看到回調日誌,以確認你的掛鉤工作。

2)建立分支。確保你已經設置了所有的GitHub配置,因爲只有完成了這些設置,回調纔會觸發作業。

  • 在「源代碼管理」部分中,選擇「Git」選項並填寫回購的詳細信息,例如, '[email protected]:......'
  • 在 '建立觸發器' 部分中,選擇 '建立時,改變推到GitHub的'

3)推到Heroku的。這裏有幾件事要考慮。

  • 您需要確保您的工作已添加Heroku遠程回購。創建新工作時,這是一次性操作,不需要爲每個構建完成。例如:
heroku git:remote -a myApp 
git remote add heroku [email protected]:myApp.git 

創建只以上的執行shell腳本,只在你第一次構建中使用。

  • 如果您有Ping目標(New Relic),請在部署過程中禁用它們以避免您的應用程序關閉的錯誤通知。
curl https://heroku.newrelic.com/accounts/ACCTID/applications/APPID/ping_targets/disable -X POST -H "X-Api-Key: APIKEY" 

不要忘記後重新打開它:

curl https://heroku.newrelic.com/accounts/ACCTID/applications/APPID/ping_targets/enable -X POST -H "X-Api-Key: APIKEY" 
  • 執行相同的維護模式在App
heroku maintenance:on --app myApp 
heroku maintenance:off --app myApp 

把這個一起,在詹金斯典型的部署腳本可能看起來像這樣:

#one off to ensure heroku remote is added to repo 
heroku git:remote -a myApp 
git remote add heroku [email protected]:myApp.git 
#disbales 
curl https://heroku.newrelic.com/accounts/ACCTID/applications/APPID/ping_targets/disable -X POST -H "X-Api-Key: APIKEY" 
heroku maintenance:on --app myApp 
#push to heroku 
git push --force heroku master 
heroku run rake db:migrate --app myApp 
#enables 
curl https://heroku.newrelic.com/accounts/ACCTID/applications/APPID/ping_targets/enable -X POST -H "X-Api-Key: APIKEY" 
heroku maintenance:off --app myApp 
+0

感謝您的回答,這很有幫助。由於多個遙控器,我一直遇到這個解決方案的問題。 GIT_BRANCH現在解析爲heroku/master而不是origin/master,我注意到這個應用程序現在從這兩個遙控器中'git pulls'。我不會有這樣的後果,但似乎不是一個好主意。有任何想法嗎? – DrewVS

+0

嘗試'git fetch'然後 'git checkout origin/master' – blotto

10

作爲替代使用Heroku的API如上文所述的部署,您可以簡單地將您的代碼推送到遠程Git存儲庫(即作爲構建後行動的一個Heroku)。因此,你的工作將定義兩個Git倉庫 - 一個是你的Github倉庫,另一個是Heroku倉庫。

enter image description here

給Heroku的存儲庫中的名稱,如「Heroku的」,並在生成後操作部分,使用一個Git出版商。請務必在目標遠程名稱字段中選擇heroku名稱。 enter image description here

根據您在Github項目中設置生成觸發器的方式,生成完成後,Jenkins會將生成的快照推送到Heroku存儲庫,從而進行部署。

+3

身份驗證如何? –

+0

@DominicTobias身份驗證是通過將jenkins服務器ssh密鑰添加到heroku中完成的。 – Putna

+0

@Putna謝謝,我最終走下了這條路(將build文件夾推送到heroku)並在jenkins上使用ssh密鑰 –

1

首先,你應該切換項目中使用SSH密鑰進行驗證,並添加您的公用SSH密鑰到您的Heroku帳戶:

heroku git:remote --ssh-git 
heroku keys:add 

隨着

git remote -v 
heroku [email protected]:your-project.git (fetch) 
heroku [email protected]:your-project.git (push) 

你可以找出網址在Jenkins配置中用作存儲庫URL。然後按照從@Andy格洛弗答案給出的說明(見http://thediscoblog.com/blog/2014/01/24/continuous-delivery-for-heroku-with-jenkins/)來配置你的詹金斯。

最後,爲了讓Jenkins在Heroku上推送到你的git倉庫,你應該要求你的Jenkins管理員爲你提供執行Jenkins作業的root/jenkins用戶的公共ssh密鑰。通過您的Heroku dashboard將此公鑰添加到您的Heroku帳戶。如果您的構建工作成功,Jenkins將能夠推送到您的Heroku帳戶,從而進行部署。