2009-09-28 117 views
28

與Git + Heroku(Ruby on Rails)配合使用的良好部署策略是什麼?使用分支策略與Heroku的良好Git部署?

目前我的工作方式是使用我的起源Git存儲庫:所有功能(或'故事')首先作爲分支簽出,然後與主合併並推送到原點。

任何推送到origin/master的內容都會觸發一個腳本,將新的rails代碼拖到臨時區域(簡單的rails webserver)。

當我需要將一個新的生產版本推送到Heroku時,我應該創建一個新的分支(稱爲類似production_version_121的東西),然後以某種方式將它推向Heroku?

理想情況下,我想選擇以前的開發版本中的哪些功能,我應該將其包含到生產分支中...測試它,然後推送到Heroku。

例如,我可能不希望所有最新的代碼被推到生產中。我可能想要功能「a」,我已經工作,功能「c」都以某種方式合併到生產中,而不包括需要更多調試的實驗功能「b」。

N.B.我將首先嚐試避免使用Capistrano,然後爲現在手動獲取某些內容。

想法?最佳實踐?

回答

32

在Gemcutter項目中,我們只需要一個production分支。我們希望看到對生產現場的任何更改都會合併到分支,然後與部署:

git push heroku production:master 

staging分公司提供的臨時網站(也是在Heroku)

+0

謝謝大衛!我很好奇,如果有人這樣做。對,我是我只是用我的遠程「主」作爲生產..所以部署我只是繼續做:git push heroku(當時間到來) 問題是,我還沒有我想要的功能選擇包括在生產部署中......我預計需要出現,在這種情況下,我將不得不在遠程git服務器上啓動合法的「生產」分支。下次我嘗試使用:git push heroku production:master我認爲它會抱怨,我需要使用「force」標誌,以便heroku拋棄它跟蹤的內容。 – Zaqintosh 2009-11-18 18:58:58

+0

我唯一的問題是,你是否在使用遠程主機進行任何操作?或者你在分支機構工作,並在100%的時間內部署/合併分支機構? – Zaqintosh 2009-11-18 19:00:15

+0

是否需要強制取決於「生產」是否是遠程主服務器當前存在的直接後代。 Gemcutter使用「主」分支作爲主幹。這是所有最新變化的地方。特徵分支被創建,然後被合併回主幹。有時候,個別提交或特徵分支會合併到生產分支中,如果我們想要所有分支,有時候master會直接合並。 – 2009-11-19 18:41:38

7

有很多方法可以解決這個問題,這取決於你的喜好。

我會給你一個可能的策略:如果你已經有一個使用master的自動化staging設置,我會建議創建一個'production'分支。如果要將修補程序/功能提升爲生產,只需將主題分支合併到「生產」分支中即可。

git checkout production 
git pull . my-topic-branch 
(resolve any conflicts) 

當您準備實際代碼到生產服務器,你應該使用tag唯一的名稱分支(可能帶有時間戳)。然後,您只需將製作分支推送到Heroku。

git checkout production 
git tag release-200910201249 

我建議創建一個腳本或混帳別名自動爲時間戳標記,因爲使用一致的命名方案是非常重要的。我用的是這樣的:

git config alias.dtag '!git tag release-`date "+%Y%m%d%H%M"`' 

,讓我做只需鍵入git dtag當我想用標記時間戳的釋放。

您可以使用git tag查看您的標籤並使用git show release-1234查看它們。有關標籤的更多信息,請運行git help tag。你也可以在標記上找到這個Github guide有幫助。我還建議閱讀其他人的工作流程(這裏是a nice writeup),然後挑選適合自己的工作流程。

+0

感謝您的回覆! 我不太熟悉標記或它實際上做了什麼...雖然我理解(大部分)您的建議是什麼,但通過git命令有一個簡短的示例或流程的運行會很好。 再次感謝! – Zaqintosh 2009-10-08 07:06:06

+0

我已經添加了用於標記的命令以及過去使用的方便別名。請注意,這些是用於本地存儲庫的。您可以使用'git push --tags'將標籤推送到另一個回購站。 – 2009-10-20 17:08:21

+0

因此,讓我們說你推一個release-xxxxxxxxx(使用'git push heroku production:master')並且它很好。你如何回滾到最近已知的良好修訂版本?換句話說,你如何推送特定的標籤? – brittohalloran 2011-11-07 22:58:35

16

曾經相似的目的自從我讀了文森特Driessen的A successful Git branching model,我已經迷上了。我的整個公司(我們中的8個)現在已經在這個模型上進行了標準化,並且我諮詢過的其他一些地方也開始使用它。

大多數人都表示他們已經做了類似的事情,發現很容易適應。

簡而言之,你有2個永久的分支(主和開發)。大多數情況下,你只需要開發分支並將其合併爲開發。當你進行產品發佈和修補程序時,事情會變得更復雜一些,但是在閱讀了這篇文章之後,它變得更加紮實。

甚至有一個命令行工具git-flow可以幫助你。