5

我們在我們的開發部門有一臺生產機器,我們已經在整個工作日內建立了這臺生產機器。 這樣做是:我們應該通過哪些硬件改進來加速構建機器?

  • 刪除源代碼先前簽出(5分鐘)
  • 是否從顛覆一個乾淨的檢出(15分鐘)
  • 構建一大堆的C++和.NET代碼( 35分鐘)
  • 構建安裝並運行單元測試(5分鐘)

鑑於上述情況,什麼樣的影響,會增加不同的硬件對改善需要做以上的時間?

例如 - 我正在考慮使用SSD作爲硬盤,因爲編譯涉及大量的隨機磁盤訪問。

顛覆服務器當前是一個虛擬機 - 將它切換爲物理機幫助緩慢結帳?

從Core 2 Duo處理器升級到i7會有什麼影響?

有關加速上述的其他建議嗎?

+0

這是多少並行處理?例如你是否在平行檢查不同的項目,並且你在做一個並行構建? (我覺得它奇怪的消滅了以前的結賬雖然需要5分鐘..) – nos 2010-09-24 14:02:30

+0

沒有一個真正的並行。刪除需要很長時間,因爲代碼很多,並且C++項目會生成一個大的中間文件。最終的結果是,我們必須刪除分散在大量文件中的5GB以上的數據。我可能會嘗試的是移動舊的源代碼而不是刪除它,因爲這非常瞬間。 – 2010-09-24 16:28:56

+1

您特別要求提供硬件解決方案,但我看到一個軟件優化:您的svn結帳。我們編寫了一個腳本,它執行svn狀態,解析其輸出,並使用它來刪除所有未版本化的文件並還原所有版本化的文件,然後僅執行svn更新,而不是刪除並執行全新的結帳。每次構建都會減少很多時間。唯一的缺點是,如果我們在svn操作過程中停止構建,它將鎖定工作副本,並且在構建再次通過之前我們必須手動解鎖。我們認爲這是不值得的。 – 2010-09-27 11:55:16

回答

2

可能會加速SVN簽出過程的一個技巧可能是在構建機器上有一個工作副本,更新工作副本並從工作副本到構建目錄執行svn export。這應該會減少SVN服務器的負載並減少網絡流量。

減少前5分鐘清理的另一個技巧是將舊的構建目錄移動到同一磁盤上的臨時文件夾,然後在主構建完成時使用另一後臺任務刪除舊構建目錄(可能是每晚清理任務)。

+0

感謝您的建議。我修改了構建來移動而不是刪除,這幾乎是瞬間的。計劃的任務現在在清晨運行,以刪除前一天的所有舊版本。嘗試這樣做是在構建過程中的一個單獨的線程,但它有點凌亂:) – 2010-11-03 13:02:20

2

我想你自己提出了很好的建議。肯定會添加更快的硬盤(SSD或其他)並升級CPU。我認爲你的代碼庫(Subversion)肯定應該放在物理機器上,理想的情況是與你的構建機器分開。我認爲在升級硬件後你會注意到很大的不同。另外,確保機器沒有任何其他大型任務與構建任務同時運行(例如病毒掃描),以便構建任務不會減慢。

您的生成機設置如何執行其任務?你在使用持續集成軟件嗎?機器本身是服務器還是普通臺式機?

+0

這只是一個普通的桌面機器。除了構建解決方案外,它還運行MSBuild並執行大量定製構建任務。 – 2010-09-24 15:22:30

+0

你肯定需要加強這臺臺式機。我還建議使用像Hudson這樣的持續集成服務器來自動執行這些任務。我發現它非常有用。 – Bernard 2010-09-24 15:46:45

+1

提及病毒掃描儀+1。有一次,當病毒掃描程序被禁用時,我們的編譯時間從50分鐘下降到2分鐘。 – 2010-09-26 09:49:22

1

加速SVN的另一種方法是使用二進制協議而不是HTTP。

看起來構建時間是最耗時的部分 - 這是優化的最佳人選。平行構建在辦公室的其他機器上如何傳播 - Incredibuild等產品可能會顯着縮短編譯時間。

相關問題