versionado team subir qué español configurar cambios c# api tfs tfsbuild build-definition

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;