生成TFS 2010构建定义

3

我找不到答案,但肯定此前已经有人问过了。我正在尝试在各个分支上设置构建,这些分支在工作区映射和其他与分支位置相关的参数方面有所不同,例如解决方案文件。当我们增加主要或次要版本号时,我会分支代码,我计划实现的是当代码分支时,我可以生成具有特定参数的构建定义文件,例如正确的工作区、解决方案文件路径和版本文件路径。

1个回答

2
我建议创建一个定制化的工具,用于在版本控制中创建分支操作以及相应的构建定义。以下是使用TFS API创建构建定义的一些代码示例。
另外一种方法是创建一个Web服务,订阅TFS Eventing Service中的CheckInEvent事件,并检查详细信息以确定是否为分支操作,然后从那里通过编程方式创建构建定义。
下面的代码被无耻地复制自这篇博客文章:http://geekswithblogs.net/jakob/archive/2010/04/26/creating-a-build-definition-using-the-tfs-2010-api.aspx
string teamProject = "TeamProjectName";
string buildController = "BuildControllerName";

TfsTeamProjectCollection server = new TfsTeamProjectCollection(new Uri("http://<tfs>:<port>/tfs"));
server.EnsureAuthenticated();
IBuildServer buildServer = (IBuildServer)server.GetService(typeof(IBuildServer));

var buildDefinition = buildServer.CreateBuildDefinition(teamProject);
buildDefinition.Name = "TestBuild";
buildDefinition.Description = "description here...";

buildDefinition.ContinuousIntegrationType = ContinuousIntegrationType.Individual;


buildDefinition.Workspace.AddMapping("$/Path/project.sln", "$(SourceDir)", WorkspaceMappingType.Map);
buildDefinition.Workspace.AddMapping("$/OtherPath/", "", WorkspaceMappingType.Cloak); 

buildDefinition.BuildController = buildServer.GetBuildController(buildController); 
buildDefinition.DefaultDropLocation = @"\\SERVER\Drop\TestBuild"; 

//Get default template 
var defaultTemplate = buildServer.QueryProcessTemplates(teamProject).Where(p => p.TemplateType == ProcessTemplateType.Default).First(); 
buildDefinition.Process = defaultTemplate;

//Set process parameters 
var process = WorkflowHelpers.DeserializeProcessParameters(buildDefinition.ProcessParameters); 

//Set BuildSettings properties 
BuildSettings settings = new BuildSettings(); 
settings.ProjectsToBuild = new StringList("$/pathToProject/project.sln"); 
settings.PlatformConfigurations = new PlatformConfigurationList(); 
settings.PlatformConfigurations.Add(new PlatformConfiguration("Any CPU", "Debug"));
process.Add("BuildSettings", settings);

buildDefinition.ProcessParameters = WorkflowHelpers.SerializeProcessParameters(process); 

buildDefinition.RetentionPolicyList.Clear();
buildDefinition.AddRetentionPolicy(BuildReason.Triggered, BuildStatus.Succeeded, 10, DeleteOptions.All);
buildDefinition.AddRetentionPolicy(BuildReason.Triggered, BuildStatus.Failed, 10, DeleteOptions.All);
buildDefinition.AddRetentionPolicy(BuildReason.Triggered, BuildStatus.Stopped, 1, DeleteOptions.All);
buildDefinition.AddRetentionPolicy(BuildReason.Triggered, BuildStatus.PartiallySucceeded, 10, DeleteOptions.All);

buildDefinition.Save(); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接