2011-09-07 19 views
9

短版使用Git在夜間散發建立一個工作室

需要夜間分發構建每天早上人70+,想用混帳進行負載平衡的轉移,並想知道如果在開始設計系統之前存在提示,陷阱或缺陷。

龍版每天早晨,我們需要將我們每晚構建分發到的70+人工作室(藝術家,測試人員,程序員,生產等)

。到目前爲止,我們已經將該版本複製到服務器,並且已經編寫了一個同步程序來獲取它(使用下面的Robocopy);即使設置了鏡像,傳輸速度也會慢得令人無法接受,因爲它需要長達一小時或更長時間才能在高峯時間進行同步(非高峯時間大約爲15分鐘),這意味着硬件I/O瓶頸。

我擁有的一個絕妙的(雖然絕對不是原創的)想法是在整個工作室分配負載。在調查使用臭名昭着的bit-torrent協議編寫客戶端之後,我想到另一個想法是,我可以按照設計使用git,這將使我們可以分發構建和修訂管理,並減少服務器的額外好處。

問題

  1. 你如何使用Git開始?我有中央位置的源控制系統的經驗,如PerforceSVN。閱讀文檔,看起來您只需運行git init path\\to\folder,然後在另一臺機器上運行git clone url

  2. 從哪裏得到url用於上述git clone命令?我可以定義嗎?我發現有一個奇怪的概念,因爲git沒有中央服務器 - 或者它?例如類似於一個洪流跟蹤器?

  3. 什麼是更好的選項來識別構建,使用變更列表號碼或標籤?

  4. 是否可以限制存儲的修訂數量?這將會很有用,因爲除了每晚構建之外,我們還有幾個CI構建需要在整個一天內進行分發,但是無限次數的修訂沒有任何意義。在Perforce您可以通過設置屬性來限制修訂版本。

+0

我會更深入地討論BitTorrent,大多數客戶支持從.rss源獲取種子,因此您可以發佈具有最新版本的源,並讓每個人自動下載。 – grapefrukt

+0

我們希望使用自定義客戶端,因爲生產將永遠不允許我們在用戶機器上安裝一個bit-torrent客戶端,例如uTorrent的。然而,我確實喜歡發佈RSS feed並自動同步的想法(這是我們上週對我們當前的解決方案進行的破解)。 – Dennis

+0

在讀完git之後(感謝答案中提供的鏈接),我認爲我需要再次查看BitTorrent。 – Dennis

回答

4

我不認爲git會對你的情況有所幫助。是的,它是分發的,但不是在「儘可能向更多人分發內容」的情況下。它不會幫助你減少帶寬負載,如果你將使用git over ssh,也會有額外的負載。也許你應該退後一步,給另一個機會來bittorrent協議。

+0

謝謝德米特里。我很高興我提出了這個問題,因爲我假設分佈意味着*取*會是平衡的。 – Dennis

+0

我有另一個關於使用BitTorrent來實現這個問題:http://stackoverflow.com/questions/7344727/using-the-bittorrent-protocol-to-distribute-nightly-and-ci-builds – Dennis

1
  1. 您可以使用文件協議(「local protocol」),如果所有的客戶端有一個共享訪問您的服務器。
  2. 如果你可以從你的客戶做一個dir或ls ...你有你需要的網址。
  3. 標籤:一旦你克隆回購,你可以檢出它到某個標籤。
  4. 不是真的,你會每天早上取得新的提交以獲得完整的歷史。

注意:將二進制文件放入分佈式回購並不是解決方案will scale well in time,回購越來越大。 (你有alternative git setups here)。
優點是通過中央Git回購(它必須比robocopy更快)來計算delta,並將所述delta作爲下游回購完成的回答。

+0

感謝您的答案。我會看看*替代git設置*。我不喜歡在任何*源代碼控制解決方案中存儲二進制文件,但是這是我們的要求之一,因爲很多東西都可以構建到可執行文件中,因爲它們可能是單個文件(在* Epic *和* Unreal 3 *中握手) 。 – Dennis

1
  1. 是的,這是它的本質。在某處創建一個存儲庫,然後從其他地方克隆它。

  2. 您在1)中初始化的存儲庫必須可以從要克隆到的機器訪問。 Git是無服務器的,但每個存儲庫都必須從某處獲得它們的東西。所以你所有的70多臺機器都必須知道他們應該在哪裏得到新的構建。如果你想分配負載,你必須弄清誰是誰的更新狀態。

    的URL可以是文件路徑,一個networkpath,一個SSH主機與路徑等

  3. 標籤將工作做好。

  4. 你也許可以重新綁定git倉庫以刪除舊版本。見Completely remove (old) git commits from history

但是,我不認爲它會解決你的原始問題,分配負載。其他途徑應該被調查。例如組播複製,或許MQcast and MQcatch可以幫到你嗎?

+0

感謝您的回答,我將研究您提到的多播選項。 – Dennis

相關問題