首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于TFS构建脚本的SDLC管理

用于TFS构建脚本的SDLC管理
EN

Stack Overflow用户
提问于 2009-07-09 23:47:11
回答 1查看 2.1K关注 0票数 1

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

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

Team build喜欢在构建过程中创建工作项、更新工作项和添加标签,这在“测试”构建中是不会发生的。

jMM

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-07-10 02:36:41

在这里查看我的答案: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文件,它控制构建的其余部分将如何操作。我的是这样的:

代码语言:javascript
复制
<?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启动的构建定义。就我自己而言,我有持续集成的“快速”构建和夜间运行的“完整”构建。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1107008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档