2009-06-10 42 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,但它不是严格要求。将构建依赖关系分离到子文件夹中比美观更重要。

相关问题