我正在尝试构建一份报告来显示各种构建代理的相对效率,但无法从该工具中获取我需要的信息。
我想要的是一个包含以下列的简单网格:
- 内部版本号
- 构建定义
- 构建代理
- 构建状态
- 构建开始时间
- 构建持续时间
这可以让我做一些类似的事情,比如根据agent2 到agentN 上的相同构建定义,绘制agent1 上给定构建定义的成功构建持续时间。
我该怎么办呢?
我最初的目的是向你指出TFS OLAP 立方体并描述如何找回你想要的东西。然后我意识到立方体不提供哪个代理构建了哪个构建的信息。
然后我认为编写一个小型 TFS 控制台应用程序来打印您想要的信息会很简单:
using System;
using Microsoft.TeamFoundation.Build.Client;
using Microsoft.TeamFoundation.Client;
namespace BuildDetails
{
class Program
{
static void Main()
{
TfsTeamProjectCollection teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://TFS:8080/tfs/CoLLeCtIoNNaMe"));
var buildService = (IBuildServer)teamProjectCollection.GetService(typeof(IBuildServer));
IBuildDefinition buildDefinition = buildService.GetBuildDefinition("TeamProjectName", "BuildDefinitionName");
IBuildDetail[] buildDetails = buildService.QueryBuilds(buildDefinition);
foreach (var buildDetail in buildDetails)
{
Console.Write(buildDetail.BuildNumber+"\t");
Console.Write(buildDefinition.Name+"\t");
Console.Write(buildDetail.BuildAgent.Name+"\t");
Console.Write(buildDetail.Status+"\t");
Console.Write(buildDetail.StartTime+"\t");
Console.WriteLine((buildDetail.FinishTime - buildDetail.StartTime).Minutes);
}
}
}
}
This won't compile, since
![enter image description here](https://i.stack.imgur.com/vVKtk.png)
Eventually I dove into the IBuildInformationNode[]
and got the build agent as follows:
IBuildInformation buildInformation = buildDetail.Information;
IBuildInformationNode[] buildInformationNodes = buildInformation.Nodes;
string agentName;
try
{
agentName = buildInformationNodes[0].Children.Nodes[3].Fields["ReservedAgentName"];
}
catch
{
agentName = "Couldn't determine BuildAgent";
}
Console.Write(agentName + "\t");
try-catch 是必要的,因此您可以处理在代理选择之前失败/停止的构建。
如果您使用后一部分作为失败的替代品Console.Write(buildDetail.BuildAgent.Name+"\t");
您最终应该得到一个控制台应用程序,其输出可以通过管道传输到 *.CSV 文件,然后导入到 Excel。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)