0

我終於開始抽出時間瞭解持續集成過程。我已經開始在家裏組建一個構建服務器,並試圖討論如何處理構建中的不同情況。構建服務器/ CI設置 - 在應用程序中使用最新組件

如果我有應用程序「B」使用的組件「A」,告訴構建服務器編譯「A」然後使用新編譯的「B」編譯「B」的「最佳實踐」 A」

很明顯,我想看看我是如何整合工作的部件,我看到與DLL的等

感謝工作了很多很多的數據庫實例,但沒有!

回答

1

有兩種方法可以解決這個問題:

1 - 是你的相關組件獨立和再利用無處不在

2 - 這是部分大型系統這是相互依存的,但良好模塊化的進不同的項目。

我不是100%確定第一種情況下的最佳做法,但我可以在第二種情況下解釋我所做的。

假設你有以下結構

/後備箱
/trunk/Rob.Core
/trunk/Rob.MyCoolApplication.Server
/trunk/Ron.MyCoolApplication.Client

每這些應用程序是「頂級」應用程序,每個應用程序都有自己的解決方案和目標,它們獨立編譯,但它們是同一個系統的一部分。

爲了以最小的煩惱獲得「流暢」的構建集成,我總是建議嘗試在dev和build服務器上重現相同的環境。因此,當您簽出編輯這些應用程序時,應該將/ trunk插入到/ MyTrunkFolder中。

現在,我傾向於做的,是在任何可重複使用的.dll文件的或組件,建立具有xcopys它的建立輸出(在釋放模式)到後生成動作後生成作用:

/trunk/CompiledOutputs/AppOrLibName/

該文件夾從未簽入非常重要,它應該通過構建先決條件解決方案來生成。

現在,在將Rob.MyCoolApplication.Server中的引用添加到Rob.Core時,實際上會添加對/trunk/CompiledOutputs/Rob.Core/some.dll的引用。

這樣你的開發環境看起來就像你的構建服務器。 正確連接您的依賴關係後,您需要在CI系統中添加觸發器。在CCNET中,對於上面的例子,我會在成功構建Rob.Core時觸發一個觸發器來觸發Rob.MyCoolApplication.Server的構建。

當您對系統進行全新檢出時,建議使用批處理腳本以依從順序觸發msbuild來構建您的環境。

以上只有在您始終希望您的應用程序針對組件的最新版本進行構建時纔有效。如果情況並非如此,那麼您可能希望將引用程序集的簽入文件夾作爲使用它們的應用程序的一部分,然後在有效時手動更新到已編譯組件的新版本所以。

關於這個問題的文章很少,所以大部分內容都是在3-4個項目中感受到的,但是在我最後的兩個大型項目中它肯定是可重複和可靠的。顯然,你的里程可能會有所不同。

0

AntnAnt是一些適用於Java和.Net的構建工具,它們是可能有所幫助的腳本示例。如果你想要一些更多的想法,MsbuildCruise Control也可能是有用的工具。

我可能會使用一些腳本,在構建B中說A必須先構建,這是大多數現代構建工具支持的依賴關係。

+0

您是否可以鏈接到任何已在* build server *環境中設置依賴關係的示例?很明顯,VS(我是一個.NET開發人員)可以有引用,但是他們在構建服務器上出去了。 – 2009-07-27 21:59:23

+0

在nAnt中,可以有一個.build文件,您可以設置一個捕獲依賴關係的目標。例如,有一個目標調用其他目標,以便完成以下步驟: 1)從模板生成配置。 2)編譯代碼。 3)運行單元測試。 4)運行集成測試。 5)運行WatiN測試。 – 2009-07-27 22:10:31

1

幾乎所有的.net構建服務器都可以從解決方案中獲得項目引用/依賴關係。要考慮的主要問題是構建路徑必須鏡像您的開發路徑。

現在,清楚的是,如果您使用的是GAC'd程序集,那麼這些程序集也必須在您的構建服務器上進行GAC處理。否則,你會遇到問題。

以您爲例,您的解決方案文件應該同時包含項目A和B.此外,對於A應該有一個項目依賴項B.您可以通過右鍵單擊項目B中的References文件夾,選擇Projects選項卡並選擇Project A來實現此目的。

該信息get與Project B存儲在一起。解決方案維護B的參考和項目A之間的聯繫。我希望這是有道理的。

+0

我會給這個去,謝謝 - 非常清晰和簡潔:) – 2009-07-27 22:09:26

相關問題