2010-09-15 72 views
0

我想爲一個大型項目安裝一臺CI服務器很長一段時間,但沒有足夠的時間,而且我上面的人也不在乎,他們只是說「這很有趣,它可以節省我們一些時間」,但從來沒有做任何事情......有關TeamCity的一些問題

我alreayd有一些CC.NET的經驗,但只是在小型項目,併爲了學習的基礎知識它。最近有更多的空閒時間,所以決定給TeamCity一個嘗試,並將其設置爲大型項目。

有,但是,有兩個問題與引用打交道時,我突然跳出:

1)當有多個項目的工作,我儘量不使包含所有這些(大解決方案加上並不總是可能的) ,因爲我也使用SVN,我使用指向其他項目(例如:.... \ Library A \ trunk \ Library \ bin \ release \ LibraryA.dll)的編譯程序集的相對路徑。對於我和參與該項目的同事來說,它一直都很好,但是我很難讓TC項目去撿起它,我應該如何設置我的依賴關係?

2)其中一個庫是由另一家公司製作的,並且SVN存儲庫與它們共享。他們最近不得不添加對Oracle數據庫的訪問權限,他們使用Oracle數據提供程序,似乎與在GAC中註冊的程序集一起工作,但在構建解決方案時,它會輸出另一個類似的程序集,但使用不同的程序集版本糾正我,如果我錯了,我一直與內置的Oracle提供商合作,因爲它已經足夠了)。在我的公司方面,我們使用該「輸出組件」,並且項目編譯和工作正常,但我們以前必須更改引用,並且修改存儲庫中的項目文件是不可能的,是否有任何解決方法爲了這?

感謝您的回覆。

回答

0

感謝所有的答覆,學到了一些新的東西。

昨天可以多玩一點TC,瞭解了更多關於VCS結賬規則的知識,並發現#1可以很容易地用工件解決(這個名字起初我沒有意識到它們是什麼),所以我正在使用它,而且我的項目迄今爲止沒有任何問題。

你們怎麼看待這種方法?圖書館給我提供了同一項目「核心」庫的問題,所以我也已經爲他們設置了一個項目。

+0

將此答覆標記爲答案,因爲它是解決我的問題的內容,並且沒有進一步的評論或答覆。檢查其他答案是有用的。 – Neverbirth 2010-09-28 17:59:34

1

對於1),當您的項目由TC構建時,您可以使用Svn externals從其他項目中獲取組件和其他依賴項。

您還可以設置TC來檢測外部變更的時間並使用最新版本構建項目,或者您可以將TC項目鏈接在一起,以便順序構建。

我已經花了很多時間讓CI服務器在我們的地方運行起來,並且它已經真正地得到了回報。它仍然需要一些時間讓事情繼續下去,但是會認真地建議你啓動並運行。

對不起,不能幫你2)。

+0

感謝您的回覆,但是,這不是我正在尋找的,因爲我們不會將我們的二進制文件上傳到我們的存儲庫。我不知道外部事物,所以學習新事物總是很好,再次感謝。我已閱讀了VCS結帳規則,但我仍然想知道這是我正在尋找的。 – Neverbirth 2010-09-16 07:52:14

0

通過修改引用屬性並將其設置爲不尋找特定版本來解決#2。另一家公司似乎已經接受了。

還沒有時間檢查#1的VCS簽出規則。

1

對於1)您可以爲項目設置ReferencePath並指向包含編譯好的程序集的目錄。

在我們的TC配置中,我們將所有TeamCity依賴加載到名爲「Dependencies」的子目錄中,並將編譯器的ReferencePath設置爲此目錄。

隨着MSBuild的亞軍,這很簡單:

在書房.proj你需要定義一個屬性生成(我們稱之爲ReferencePath

<PropertyGroup> 
    <ReferencePath>$(MSBuildProjectDirectory)\Dependencies\</ReferencePath> 
</PropertyGroup> 

,然後調用MSBuild任務吧:

<MSBuild Projects="$(ProjectFiles)" Properties="Configuration=Release;ReferencePath=$(ReferencePath)" Targets="Rebuild" /> 

@(ProjectFiles)是收集所有.csproj -files一個簡單的ItemGroup。

<ItemGroup> 
    <ProjectFiles Include="$(MSBuildProjectDirectory)\**\*.csproj" /> 
</ItemGroup> 
+0

很高興知道這一點,我也瞭解到,您可以爲參考添加條件,只用於運行目標。 – Neverbirth 2010-09-24 09:16:12