c# - team - API de TFS: cómo consultar compilaciones independientemente de a qué definición de compilación pertenecen
tfs scrum (2)
Parece que no hay sobrecargas de IBuildServer.QueryBuilds(...)
me permite hacer eso.
Aquí está mi código:
TfsTeamProjectCollection tfs = context.GetValue(TeamProject);
IBuildServer buildServer = (IBuildServer)tfs.GetService(typeof(IBuildServer));
buildServer.QueryBuilds( // **what should i put here?**
No quiero especificar la definición de compilación, porque la compilación que quiero puede ser de cualquier tipo.
Esta pregunta parece fácil, pero googlear no me dio respuestas.
Este código obtendrá todas las construcciones. . . siempre
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);
}
}
Sin embargo, probablemente esté más interesado en este código, que enumera cada proyecto de equipo y obtiene el estado de compilación más reciente para cada una de las definiciones:
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();
}
Puede utilizar el siguiente enfoque (inspirado en el artículo http://www.incyclesoftware.com/2012/09/fastest-way-to-get-list-of-builds-using-ibuildserver-querybuilds-2/ ):
Beneficio - respuesta mucho más rápida (de mis propias pruebas - ¡unas 50 veces más rápido!)
//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;