我是一個.NET的傢伙,因此與在Windows世界的事情工作...話說回來,雖然我每日的基礎上合作,共同管理構建過程的技術,從你的世界來了! (Linux/java技術在括號中,但是我也包括了它們與Windows讀取器的等價物)我使用CruiseControl.NET(CruiseControl),VisualSVN(SVN),Tortoise和NAnt(Ant)來照顧我所有的構建需求。
所有我的構建通常自動推並在檢查的時間標記,這是通過CruiseControl的,因爲它監視我的源控制(SVN或顛覆)來完成。當CruiseControl(CC)發現新代碼已被檢入時,它將執行一個CC項目,該項目又調用構建服務器上的Ant腳本。
Ant腳本在常見構建中爲我做了幾件事情。它將檢出最新代碼的副本並將其下載到構建服務器。然後它將構建代碼以確保至少編譯的東西。然後它設置我的數據庫的乾淨副本,並執行任何SQL腳本以構建基準數據庫直到當前版本。然後運行我所有的單元測試項目。然後運行集成測試,其中包括測試我的存儲庫層,以確保代碼仍與我的後端對齊(我通常在我的項目中使用ORM,因此它們很少不同步......但這是一個很好的步驟正在進行中)。一旦所有測試都通過(或失敗),我將數據庫回滾到乾淨狀態,並執行腳本以使其達到當前版本(這非常重要,因爲它爲團隊提供了一個乾淨的數據庫,以便在點擊時進行開發的按鈕)。如果構建成功,那麼我會將代碼部署到開發服務器(我也有一個點擊部署到我的登臺服務器和生產服務器)。如果您想在每次簽到時標記您的代碼庫,那麼您也可以在這裏做到這一點。
一旦所有這些完成,我喜歡使用NDepend,NDoc和NCover對我的代碼進行一些分析。 NDepend是一個代碼分析工具,用於確保事物在架構上是正確的,命名標準是應該的,並且是一個全部更多。 NDoc提取所有代碼註釋併爲我的代碼創建MSDN樣式文檔。 NCover告訴我是否對我的代碼進行了適當的單元測試。
然後,我寫了一個自定義Ant任務,它解析了我的各種// TODO和// CodeDebt標記的所有代碼,以生成另一份報告(通常在衝刺結束時)告訴我如何在我的代碼庫中建立了很多垃圾。這可以作爲下一個衝刺的考慮因素。
所有這些報告都包含在構建電子郵件中,或者鏈接太適當。
請記住,所有上述情況發生在每次檢查...並且沒有任何人必須點擊一個按鈕!這是真正的持續集成,應該是每個構建主人的目標。
CruiseControl有一個基於web的控制檯,它也允許非web開發人員(任何人)真正進入並執行這個推動,而不必檢查代碼......調用強制構建。
鑑於此框架,只要所有內容都受版本控制,就可以輕鬆地回滾推送。您需要另一個Ant腳本來執行相同的過程,但需要額外的第一個任務,因爲它必須獲取最新版本的代碼,而不是最近版本來執行構建過程。所有的Ant任務都可以與不同的執行目標重用。
我嘗試了一些下面的建議,包括Capistrano和CruiseControl,並檢出了SpringLoops(非常酷的解決方案,但它不適用於我們)。 PHP Phing最終成爲了一個完美的搭檔。它很容易定製和設置。 – prime31 2009-07-09 17:50:32