Con*_*ark 19 c# api tfs tfsbuild build-definition
似乎没有任何超载IBuildServer.QueryBuilds(...)
允许我这样做.
这是我的代码:
TfsTeamProjectCollection tfs = context.GetValue(TeamProject);
IBuildServer buildServer = (IBuildServer)tfs.GetService(typeof(IBuildServer));
buildServer.QueryBuilds( // **what should i put here?**
Run Code Online (Sandbox Code Playgroud)
我不想指定构建定义,因为我想要的构建可以是任何类型.
这个问题看似简单,但谷歌搜索它没有给我任何答案.
Rob*_*cus 46
此代码将获得所有构建...曾经
TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(new Uri("http://tfs:8080"));
var vcs = tfs.GetService<VersionControlServer>();
var teamProjects = vcs.GetAllTeamProjects(true);
IBuildServer buildServer = (IBuildServer)tfs.GetService(typeof(IBuildServer));
foreach (TeamProject proj in teamProjects)
{
var builds = buildServer.QueryBuilds(proj.Name);
foreach (IBuildDetail build in builds)
{
var result = string.Format("Build {0}/{3} {4} - current status {1} - as of {2}",
build.BuildDefinition.Name,
build.Status.ToString(),
build.FinishTime,
build.LabelName,
Environment.NewLine);
System.Console.WriteLine(result);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,您可能对此代码更感兴趣,该代码枚举每个团队项目并获取每个定义的最新构建状态:
TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(new Uri("http://tfs:8080"));
var vcs = tfs.GetService<VersionControlServer>();
var teamProjects = vcs.GetAllTeamProjects(true);
IBuildServer buildServer = (IBuildServer)tfs.GetService(typeof(IBuildServer));
foreach (TeamProject proj in teamProjects)
{
var defs = buildServer.QueryBuildDefinitions(proj.Name);
System.Console.WriteLine(string.Format("Team Project: {0}", proj.Name));
foreach(IBuildDefinition def in defs)
{
IBuildDetailSpec spec = buildServer.CreateBuildDetailSpec(proj.Name, def.Name);
spec.MaxBuildsPerDefinition = 1;
spec.QueryOrder = BuildQueryOrder.FinishTimeDescending;
var builds = buildServer.QueryBuilds(spec);
if (builds.Builds.Length > 0)
{
var buildDetail = builds.Builds[0];
System.Console.WriteLine(string.Format(" {0} - {1} - {2}", def.Name, buildDetail.Status.ToString(), buildDetail.FinishTime));
}
}
System.Console.WriteLine();
}
Run Code Online (Sandbox Code Playgroud)
小智 8
您可以使用以下方法(受文章http://www.incyclesoftware.com/2012/09/fastest-way-to-get-list-of-builds-using-ibuildserver-querybuilds-2/的启发):
好处 - 响应速度更快(来自我自己的测试 - 大约快50倍!)
//Connect to TFS build server
string serverName = "http://myserver:8080/tfs/my_collection";
Uri tfsUri = new Uri(serverName);
TeamFoundationServer tfsServer = TeamFoundationServerFactory.GetServer(serverName);
IBuildServer buildServer = (IBuildServer)tfsServer.GetService(typeof(IBuildServer));
ILinking iLinkingService = tfsServer.GetService<ILinking>(); //can be used later to get build URL link
//Specify query
IBuildDetailSpec spec = buildServer.CreateBuildDetailSpec("*");
spec.InformationTypes = null; // for speed improvement
spec.MinFinishTime = DateTime.Now.AddDays(-21); //to get only builds of last 3 weeks
spec.MaxBuildsPerDefinition = 1; //get only one build per build definintion
spec.QueryOrder = BuildQueryOrder.FinishTimeDescending; //get the latest build only
spec.QueryOptions = QueryOptions.All;
var builds = buildServer.QueryBuilds(spec).Builds;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
22199 次 |
最近记录: |