2012-04-25 64 views
6

我正在尋找一個我希望有人構建的軟件。我要在這裏描述這個軟件,希望有人聽說過這樣的事情,並可以指出我正確的方向。推送到多個遠程的Git代理

我正在開發部署在Heroku上的Web應用程序。由於Heroku的侷限性,我處於四次(4)遠程Git回購相同回購的不幸情況。

爲什麼四個?

我們在Heroku上有多個「應用程序」。一個用於製作和幾個舞臺「應用程序」。這些都是針對相同的實際應用程序,但在Heroku中它們是獨立的「應用程序」,所以我們可以在將它們投入生產之前嘗試進行分級。

Heroku上的每個應用程序都獲得自己的獨立Git回購,並且每次將新提交推送到master分支時自動部署master分支。 Heroku的這個政策是我們問題的關鍵。因爲這意味着我們在Heroku上有3個不同的回購站,加上我們的GitHub回購站。

爲什麼它有4個不同的Git遙控器的問題?因爲這意味着當您開發並創建新的提交時,您必須(1)只推送一個遠程或(2)推送到所有遠程。

做(1)意味着想要推向哪個遙控器。我討厭這樣想。當我發展時,我不關心遙控器,我承諾並推動並重新開始工作。例如,如果我想將分支部署到分段服務器1中,我會將該分支合併到staging_1分支中並推送它。我不喜歡選擇推送到哪個遙控器。 (1)的另一個缺點是您的遙控器不同步。

我想要的是(2)。我希望每一個推動行動都能推動我們所有的四個回購。

但也有2個問題與:

問題1:在Heroku分期「應用程序」部署什麼在master。我不希望他們這樣做。我想將我的repo中的staging_1分支映射到登臺服務器Git repo上的master分支。

問題2:讓我的電腦推送到所有4個回購將花費時間。即使1個Heroku推動動作也需要很長時間。有時可能需要40秒。


提出的解決方案

這是我想要的。我想擁有一個充當代理的專用Git服務器。每當我從本地計算機推送到此Git服務器時,它會將這些相同分支並行推入我們的4個倉庫並行。這樣,從我的本地計算機的角度來看,推送似乎是即時的,而此代理服務器將自動在後臺處理Heroku回購站。

如果推到任何4個遙控器的任何原因而失敗,我想這個代理報到某種方式,所以我會知道的東西壞了,可以修復它。

另一件事,這個代理必須做的是master映射。每當我將staging_1分支推送到它時,它會將其作爲staging_1推送到所有遙控器,但是對於屬於登臺服務器的遙控器,它也會將該分支推送爲master,因此Heroku將知道部署它。

(這是很可悲的,Heroku的設計的方式,讓我需要一個像這樣的代理,但是這就是我要處理的。)

所以這是它。這是我想要的解決方案。有人知道這樣的程序嗎?

+0

問題1通過'git push staging staging_1:master'解決 - 即將本地staging_1分支推送到分級遠程主機。 – 2012-04-25 11:25:50

+0

你可能會發現https://github.com/fastestforward/heroku_san會幫助你做一個可以爲你做的部署腳本,但仍然會緩慢部署到4個版本。 – 2012-04-25 11:30:07

回答

0

這對我來說似乎有點瘋狂。 Heroku上有多個運行不同環境的應用程序。我有一個Github repo,然後Heroku可以遠程控制不同的環境。我也傾向於維護一個與Heroku遙控器相匹配的Git分支。

部署,然後進行(如約翰說)有:

git push heroku_remote local_branch:master 

我這裏記錄這一基本方法:

http://neilmiddleton.com/deploying-topic-branches-to-heroku/

但是,你必須從完全自動化的需要我可以告訴。您可以使用服務(如TDDium)爲您做這類事情,觀看Git分支,然後在測試套件通過時推送到遠程分支(例如Heroku遠程分支)。

http://neilmiddleton.com/continuous-deployment-with-heroku/

我敢肯定的TDDium方法會給你你需要什麼,與CI的附加層。

1

創建一個新的存儲庫,您可以在您推送推送時推送到該存儲庫,並在推入此存儲庫時編寫後接收掛鉤以傳播更改。