用于TFS构建脚本的SDLC管理

时间:2009-07-09 23:47:11

标签: tfs msbuild sdlc team-build

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

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

团队构建喜欢创建工作项,更新工作项并添加标签作为构建过程的一部分,我宁愿不进行“测试”构建。

JMM

1 个答案:

答案 0 :(得分:3)

在这里查看我的答案:Modular TeamBuilds

您可以将核心功能保留在一个包含在所有版本中的公共MSBuild文件中。此外,所有这些文件都是更广泛的分支结构的一部分,因此它们可以直接参与您预先存在的SDLC,而无需任何额外的工作。因此:

  1. 如果您对构建脚本进行了高风险的更改,请将其置于“开发”或“私有”分支中,就像对其他任何风险更改一样。
  2. 如果您想要一个仅用于快速验证的构建定义,请在该构建定义导入的* .targets文件中将SkipLabel,SkipWorkItemCreation等属性设置为False。
  3. 为了扩展#2,让我们以“生产”与“测试”构建为例。您只想打开生产版本中的标签等功能。因此,您将从TFSBuild.proj(以及TFSBuild.Common.targets,如果在那里定义)中删除SkipLabel属性,而是将其设置在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分支中的所有构建都是“快速”构建(对于您而言意味着没有标记等),Release分支中的所有构建都是“完整”构建,并且构建来自主分支可以取决于用户从Visual Studio / TSWA启动的构建定义。我自己,我有“快速”构建设置与持续集成和每晚运行的“完整”构建。