tfs - 自动更新 TFS 构建定义
问题描述
我们正在从 TFS2010 迁移到 TFS2015 update3。我们想用新的 TFS2015 XAML 控制器和代理名称更新所有现有的 TFS2010 XAML 构建定义。是否有一种自动化的方式可以完成,因为它需要在所有现有的构建定义上完成。
解决方案
您可以尝试使用 TFS API 来更新 XAML 构建定义:
下面的示例供您参考:(有关详细信息,请参考此线程:更新许多 TFS 项目的构建定义)
将其称为BuildControllerChangeUtil http://tfsserver:8080/tfs/defaultcollection ProjectName
其中的projectname
项目,其构建已更新构建服务器。
using Microsoft.TeamFoundation.Build.Client;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.WorkItemTracking.Client;
using System;
using System.Collections.Generic;
using System.Linq;
namespace BuildControllerChangeUtil
{
class Program
{
static void Main(string[] args)
{
string tfsDefaultcollection = args[0];
string knownGoodProject = args[1];
var tfs = new TfsTeamProjectCollection(new Uri(tfsDefaultcollection));
var buildServer = tfs.GetService<IBuildServer>();
var knownGoodDefs = buildServer.QueryBuildDefinitions(knownGoodProject);
var testController = knownGoodDefs.First(bd => bd.Name.Equals("Test")).BuildController ;
var releaseController = knownGoodDefs.First(bd => bd.Name.Equals("Release")).BuildController ;
foreach (var teamProject in GetTfsProjects( tfsDefaultcollection ))
{
var buildDetails = buildServer.QueryBuildDefinitions(teamProject);
if (!buildDetails.Any())
{
Console.WriteLine("{0} has no build defintions. ", teamProject);
}
foreach (var thisBuild in buildDetails)
{
if (thisBuild.Name.ToUpperInvariant().Contains("TEST"))
{
SetBuildController(teamProject, thisBuild, testController);
}
else if (thisBuild.Name.ToUpperInvariant().Contains("PRODUCTION"))
{
SetBuildController(teamProject, thisBuild, releaseController);
}
else
{
Console.Error.WriteLine( "Team project {0} had an unknown build name {1}",teamProject , thisBuild.Name);
}
}
}
}
private static void SetBuildController(string teamProject, IBuildDefinition thisBuild, IBuildController bc)
{
Console.WriteLine("setting {0} build {1} build controller to {2}", teamProject , thisBuild.Name, bc.Name );
thisBuild.BuildController = bc;
thisBuild.Save();
}
private static IEnumerable<string> GetTfsProjects(string tfsAddress)
{
var tpcAddress = new Uri(tfsAddress);
var tpc = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(tpcAddress);
tpc.Authenticate();
var workItemStore = new WorkItemStore(tpc);
var projectList = (from Project pr in workItemStore.Projects select pr.Name).ToList();
return projectList;
}
}
}
推荐阅读
- javascript - 如何用JS合并两个表单域
- python - 有什么方法可以计算参数协方差矩阵而不是 python lmfit 包中的相关矩阵
- excel - 操作列 VBA
- flutter - 将数据写入 BLE 设备并读取其响应抖动?
- android - 带有 CircularProgressIndicator 的倒数计时器
- html - 使用 BEM 方法添加相同的元素名称
- c++ - 如何在输出中用逗号分隔数字?
- r - 将 dataframe / .csv 转换为逗号分隔的 .txt 文件
- c# - 在日期为 04-DEC-20 的 oracle db 格式中,而在控制台中显示的日期显示为 04-09-2020
- python - 频域下采样信号