2009-06-10 41 views
1

我有3個TFS版本(2個開發版和1個證書)。Modular TeamBuilds

我想模塊化構建,所以我不必每次修改3個文件來更改常用項目。

我遇到的問題是Team Build中只會自動檢索Build文件夾中的項目(TeamBuildTypes下的項目)。我可以在編譯過程中加入代碼來獲得其他文件,但到時候就太晚了。

這是我的場景。我爲常見任務設定了一個「常用」位置。然後我去了那個文件做了修改。由於該文件不下載,直到我的構建過程告訴它下載它已被檢索得太晚(導入已經發生,並且MSBuild進程構建了內存中的構建目標)。

我曾考慮將它添加到構建的工作區,但是它會在獲取源目標中獲取(這也太晚了)。

我看不到,不會有我複製文件或不使用源控制的解決方案......

什麼想法?

回答

4

在Team Build 2008中,對於這個問題沒有「理想」的解決方案,最好的選擇是將普通的東西放在構建機器$(MSBuildExtensionsPath)中,解析爲C:\Program Files\MSBuild,然後從那裏引用它們。

如果您的構建配置非常類似你可以:

  1. 點所有的構建定義,以一個單一的配置文件夾。
  2. 將常見的構建邏輯放入TFSBuild.proj
  3. 在TFSBuild.proj的底部添加<Import Project="TFSBuild.$(BuildDefinitionName).proj" />
  4. 添加在TFSBuild中的構建定義之間不同的配置。 <BuildDefinitionName>.proj
3

你最好的選擇是把常見的東西在構建機上的$(MSBuildExtensionsPath)解析爲C:\ Program Files文件\的MSBuild

我不喜歡這個想法依賴於「魔術」地點。你最終需要一個第二部署+ QA過程只是爲了讓你的構建腳本同步...

只有在build文件夾中的項目(下TeamBuildTypes)由團隊生成自動檢索。

有點兒瘸,無可否認,但我還沒有發現它在實踐中的主要限制。下面是我的TeamBuild文件夾的簡化示例:

$/TeamProject 
    |- Dev 
     |- Module1 
     |- Module2 
     ... 
     Solution1.sln 
     Solution2.sln 
     |- TeamBuild 
      |- 3rdparty 
       MSBuild.Community.Tasks.dll 
       MSBuild.Community.Tasks.targets 
       RandomScriptOffTheWeb1.targets 
       ... 
      |- SrcSrv     
       srcsrv.ini 
       ... 
      |- SymStor 
       dbghelp.dll 
       ... 
      Common.targets 
      TFSBuild.proj 
      TFSBuild.Common.targets 
      TFSBuild.Config1.targets 
      ... 
      UtilityScript1.ps1 
      ... 
    |- Main   
     ... 
     |- TeamBuild 
     ... 
    |- Release 
     ... 

Common.targets由所有* .csproj(etc)文件導入。它導入我所有的第三方任務,初始化各種全局屬性/項目,並設置參考路徑。

TFSBuild.proj通過對$(BuildDefinition)進行條件處理來導入Common.targets,然後導入TFSBuild.proj,然後導入其中一個配置文件。這樣,更具體的總是覆蓋任務/屬性/等根據需要從較不具體的文件。儘管如此,這個簡短的文件卻是我感覺有限的一個地方:以編程方式將構建名稱映射到文件名會更好,但MSBuild不會讓我[聲明性]導入依賴於[runtime]目標中設置的屬性,如。

TFSBuild.Config * .targets文件大部分只設置屬性;沒有「真正的」工作。這些包括我想要參數化的團隊構建屬性,以及控制我的自定義目標(在其他地方實施)的工作方式。

TFSBuild.Common.targets是最大的一個數量級的文件。在這裏,我配置了所有具有良好默認值的Team Build屬性,覆蓋諸如AfterDropBuild之類的目標,並且定義了很多基於Config *文件中設置的條件執行的自定義目標。

注:我明顯有recursive download option,但它不是嚴格要求。將構建依賴關係分離到子文件夾中比美觀更重要。

相關問題