2

我試圖實現持續集成到我們的日常工作中。 在我們的團隊中,我們正在從我們的工作站上構建我們的Visual Studio代碼,並部署到在未使用Visual Studio的情況下使用MSBuild.exe並在構建服務器(即Jenkins)上實現自動化。如何在構建服務器上管理自動構建的依賴關係?

我們在外部依賴於引用,如我們項目中的Automap。由於automap(例如)dll不在構建服務器上,msbuild執行失敗,原因很明顯。還有其他的dll,我需要成爲構建的一部分,我只是使用automap作爲例子。

那麼,作爲自動化構建的一部分,獲取任何依賴到構建服務器的最佳方式是什麼?我已經看到使用'lib'文件夾的引用,但是我不太明白我應該把它放在哪裏(在我的項目,文件系統,SVN中?)以及構建服務器如何實現它。我也讀過NuGet可以做一些依賴關係,但是我的構建服務器沒有連接到互聯網,我不明白我如何讓我的構建拉我可能創建的NuGet包,以及它如何一起工作。

編輯:我使用顛覆,我們不能使用TeamCity,因爲我們將不得不購買它,並且沒有資金的機會。

+0

看一看:http://geekswithblogs.net/mapfel/archive/2011/07/06/146106.aspx – k0stya

回答

4

我喜歡stmax的解決方案,但它可能在這一點上是對你有點太多的工作。

要做的最簡單的事情是在存儲庫中創建一個lib目錄並將所有第三方程序集添加到該目錄中。 更新所有項目以從此lib目錄中引用第三方程序集。檢查所有內容。構建服務器喚醒以執行下一個構建時,它將提取最新的更改,其中將包括新的lib目錄和項目引用更改。綠色建設!

+0

我是否更新了我的引用,以便直接從存儲庫本身獲取第三方程序集(這甚至可能嗎?),或者在我的開發工作站上的工作副本中的lib文件夾中,一旦我簽出了?如果前者,我需要使用svn:externals嗎? –

+1

@TomPickles您可以更新它們以引用工作副本中lib文件夾中的程序集。 Visual Studio使用相對路徑作爲引用,所以它們將在存儲庫檢出的每臺機器上工作。 –

+0

感謝您的幫助! –

1

你的第一個目標應該是有CI的運行,無論你的系統是多麼優雅。構建系統時,「lib目錄」選項通常最容易。您將二進制文件檢入Subversion。這很醜陋,但它讓你開始了,你的構建水平將是可重現的,這是必須的。在這之後,研究並選擇適合您需求的外部依賴版本控制系統(可能是Nuget)。

作爲一個側面提示,請詳細檢查TeamCity的免費部署對您無效。最後我檢查了你必須有大量的協調項目或大量的構建代理需要許可證。

4

我們運行SVN + CCNet。我們有一個看起來像第三方庫的SVN倉庫:

/foo/foo-1.2.3 
/foo/foo-1.4.0 
/bar/bar-1.0.0 

也就是說,對於子目錄每個可用的版本庫每一個目錄。

一個規則是目錄必須包含原始庫 - 即解壓和提交,不允許修改。

當您在項目中需要一個庫時,您需要添加一個lib目錄,並使用鏈接(svn:externals)將其填充到第三方存儲庫的庫中。此處重要的是,您不要在本地目錄名稱中包含版本號。如果您需要FOO-1.4.0,使用svn:外部組件上的lib目錄鏈接看起來像:

foo https://svn-server/3rdparty/foo/foo-1.4.0 

,即它在/ lib/foo的結束。通過這種方式升級版本變得更容易,因爲您只需將svn:externals鏈接更改爲指向新版本,並且(只要文件名不變),所有項目都會自動獲取並進行編譯。

至於NuGet ..更多的麻煩比它的價值,但意見分歧:)

希望幫助

+0

+1這幾乎就是我們管理第三方庫的方式。唯一的區別是我們稱之爲Externals而不是Lib。 ;) –

+0

Stmax,除了你所說的我過去也有一個名爲/ foo/Latest的文件夾指向其他文件夾之一,例如/foo/foo-1.6.0。這允許通過控制文件夾的內容來更新引用。然後,您可以進行一些控制,以便多個項目/團隊不會與多個版本的dll發生衝突。 –