我正在为TFS开发几个自定义构建脚本,我想知道是否有任何开发、测试和部署TFS构建脚本的最佳实践。
您是否设置了独立于生产构建服务器的开发和QC环境?有没有其他方法可以将开发脚本的过程与构建过程的其余部分隔离开来,以便开发中的构建脚本不会干扰“生产”构建?
Team build喜欢在构建过程中创建工作项、更新工作项和添加标签,这在“测试”构建中是不会发生的。
jMM
发布于 2009-07-10 02:36:41
在这里查看我的答案:Modular TeamBuilds
您可以将核心功能分解到一个通用的MSBuild文件中,该文件包含在所有构建中。此外,所有这些文件都是更广泛的分支结构的一部分,因此它们直接参与到先前存在的SDLC中,而无需任何额外的工作。因此:
为了进一步扩展#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分支的所有构建都是“快速”构建(对您来说,这意味着没有标签等),来自Release分支的所有构建都是“完整”构建,而来自主分支的构建可以是取决于用户从Visual Studio / TSWA启动的构建定义。就我自己而言,我有持续集成的“快速”构建和夜间运行的“完整”构建。
https://stackoverflow.com/questions/1107008
复制相似问题