2009-07-09 69 views
1

我正在为TFS开发几个自定义构建脚本,我想知道是否有开发,测试和部署TFS构建脚本的最佳实践。TFS构建脚本的SDLC管理

您是否设置了与生产构建服务器分离的开发和QC环境?还有其他方法可以将脚本与其他构建过程分离开来,以便构建正在开发的脚本不会干扰“生产”构建?

团队建立喜欢创建工作项目,更新工作项目和添加标签作为构建过程的一部分,我宁愿不会发生“测试”构建。

JMM这里

回答

3

看看我的回答是:Modular TeamBuilds

你可以把提取出来成随机配备在所有建立一个共同的MSBuild文件的核心功能。此外,所有这些文件都是您更广泛的分支机构的一部分,因此它们无需任何额外的工作即可直接参与您的预先存在的SDLC。因此:

  1. 如果您对构建脚本进行了冒险的更改,请将它们置于“dev”或“private”分支中,就像处理其他任何有风险的更改一样。
  2. 如果您想要一个仅用于快速验证的构建定义,请将该构建定义导入的* .targets文件中的属性(如SkipLabel,SkipWorkItemCreation等)设置为False。

为了扩大#2,让我们以“生产”与“测试”版本为例。您只需打开生产版本中的标签等功能。所以你可以从TFSBuild.proj中删除SkipLabel属性(如果在那里定义了TFSBuild.Common.targets),而是将它设置在TFSBuild.Production.targets和TFSBuild.Test.targets中 - 当然使用两个不同的值。

正如前面提到的问题所述,TFSBuild.proj是控制构建的其余部分如何运行的主要msbuild文件。这里是我的样子:

<?xml version="1.0" encoding="utf-8"?> 

<!-- DO NOT EDIT the project element - the ToolsVersion specified here does not prevent the solutions 
    and projects in the SolutionToBuild item group from targeting other versions of the .NET framework. 
    --> 
<Project DefaultTargets="DesktopBuild" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5"> 

    <!-- Import configuration for all MyCompany team builds --> 
    <Import Project="MyCompany.TeamBuild.Common.targets"/> 

    <!-- Import build-specific configurations --> 
    <Import Condition="'$(BuildDefinition)'=='Dev - quick'"  Project="MyCompany.TeamBuild.Quick.targets" /> 
    <Import Condition="'$(BuildDefinition)'=='Main - full'"  Project="MyCompany.TeamBuild.Full.targets" /> 
    <Import Condition="'$(BuildDefinition)'=='Main - quick'" Project="MyCompany.TeamBuild.Quick.targets" /> 
    <Import Condition="'$(BuildDefinition)'=='Release - full'" Project="MyCompany.TeamBuild.Full.targets" /> 

    <!-- This would be much cleaner as we add more branches, but msbuild doesn't support it :(
     Imports are evaluated declaratively at parse-time, before any tasks execute 
    <Target Name="BeforeEndToEndIteration"> 
     <RegexReplace Input="$(BuildDefinition)" Expression=".*\s-\s" Replacement=""> 
     <Output TaskParameter="Output" PropertyName="BuildType" /> 
     </RegexReplace> 
    </Target> 
    <Import Condition="$(BuildType)==full" Project="MyCompany.TeamBuild.Full.targets" /> 
    <Import Condition="$(BuildType)==quick" Project="MyCompany.TeamBuild.Quick.targets" /> 
    --> 
</Project> 

通过这样做类似的东西,你可以确保所有从Dev分支版本是“快”建立(这对你意味着没有标签,等等),都建立发布分支是“完整”版本,并且从主分支构建可以取决于用户从Visual Studio/TSWA启动的构建定义。我自己,我有“快速”建立与持续集成和“全”建设每晚运行。

+0

我看到你发布模块化团队构建,虽然这是构建构建脚本的极好方法,但我正在寻找关于开发构建脚本的物理过程的帮助。例如,如何防止将不在“生产”中的构建脚本记录为生产版本。如果那有意义的话。 jMM – jMM 2009-07-13 16:46:24