创建TFS自定义“构建”签入策略

本文关键字:策略 构建 TFS 自定义 创建 | 更新日期: 2023-09-27 18:04:54

内置的TFS构建签入策略是不可配置的——它只是查看上次构建是否失败,如果失败,它会在Visual Studio中显示策略警告。不幸的是,它认为"最后一次"构建是最后一次及时完成的构建,而不是最后一次使用最新的更改集完成的构建。因此,即使事情被破坏了,政策也可能是清晰的。考虑这个场景:

Joe在changesset 1234中提交代码,并开始构建"Awesome build"。John在变更集1235中提交了代码,它也开始构建"Awesome build",但是变更集1235包含了一个break

由于我有多个构建代理,因此两个构建同时运行。

现在让我们假设John的构建首先完成,并且由于中断而失败-构建策略现在处于破碎状态-警告您无法签入(如预期的那样)。

Joe的构建第二完成并成功-此时的构建策略将恢复到清除状态,并且不会出现任何警告。(没有预料到,最后一个变更集仍然是坏的,需要修复)。

我知道TFS允许我通过编译一个实现'Microsoft.TeamFoundation.VersionControl.Client.PolicyBase'的类来创建自己的自定义签入策略。这里有一些问题:

  1. 我能找到的唯一官方文档是在这里(https://msdn.microsoft.com/en-us/library/bb668980.aspx),正如页面所建议的,该内容已被弃用,不再维护。这是否意味着有一种新的/更好的/更简单的方法来实现自定义签入策略?

  2. 有人知道我在哪里可以找到有关编写这些策略的文档,特别是解决我上面概述的问题的"构建"策略吗?我希望我的签入策略是基于最新的变更集,而不是最近的构建时间。

你能给的任何帮助都会很好。这个策略修正将解决我的大型开发团队中的许多令人头疼的问题。

创建TFS自定义“构建”签入策略

您提供的文章是简单而更好的方法,它适用于更高的版本,注册密钥路径是根据版本VS(8.0, 12.0等),对于64位机器,路径像HKEY_LOCAL_MACHINE'SOFTWARE'Wow6432Node'Microsoft'VisualStudio{VisualStudioVersion}'TeamFoundation' sourceccontrol 'Checkin Policies。

在您的自定义签入策略中,您可以通过TFS API (Evaluate方法)检查最新构建结果。例如:

TeamFoundationServer tfs = new TeamFoundationServer("http://tfsserver:8080/tfs"); 
IBuildServer buildServer = (IBuildServer) tfs.GetService(typeof(IBuildServer)); 
IBuildDetailSpec buildDetailSpec = buildServer.CreateBuildDetailSpec("Team Project", "Build Definition Name"); 
buildDetailSpec.MaxBuildsPerDefinition = 1; 
buildDetailSpec.QueryOrder = BuildQueryOrder.FinishTimeDescending; 
IBuildQueryResult results = buildServer.QueryBuilds(buildDetailSpec);

如果您只是需要确保更改没有问题(构建可以成功),正如Daniel所说,使用门控签入(TFVC)或使用分支策略(git)的拉取请求代替。