2012-04-04 10 views
6

que tienen una serie de definiciones de compilación que se ejecutan en base a una sola rama de TFS (por ejemplo principal).TFS: Consulta Para binarios que contiene un conjunto de cambios específica

Me gustaría (de alguna manera) consultar TFS para encontrar todas las compilaciones que contienen un número de conjunto de cambios específico que proporciono, y devolver una lista de cadenas de los nombres de las compilaciones que contiene TFS. Cualquier tipo de aplicación (extensión VS, aplicación CLI, winforms, lo que sea) servirá.

Nota: esto no es una petición 'PLZ me dan el código'; Estoy dispuesto a pelear y hacer un trabajo serio en esto. Cualquier información sobre cómo consultar la base de datos o SDK, o un ejemplo de cómo consultar compilaciones; solo un lugar para empezar a buscar sería extremadamente útil. Gracias.

Respuesta

8

El siguiente fragmento se arrastrará toda Construir definiciones de todos los del equipo de proyecto de una colección, y comprobará cada construir para una asociación con el número de cambios de entrada:

using System; 
using System.Linq; 
using Microsoft.TeamFoundation.Build.Client; 
using Microsoft.TeamFoundation.Client; 
using Microsoft.TeamFoundation.VersionControl.Client; 

namespace FindChangesetInBuild 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      TfsTeamProjectCollection teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://tfs:8080/tfs/collectionName")); 

      var versionControl = teamProjectCollection.GetService<VersionControlServer>(); 
      var buildService = (IBuildServer)teamProjectCollection.GetService(typeof(IBuildServer)); 

      var teamProjects = versionControl.GetAllTeamProjects(true); 
      foreach (var teamProject in teamProjects) 
      { 
       var buildDefinitions = buildService.QueryBuildDefinitions(teamProject.Name); 
       foreach (var buildDefinition in buildDefinitions) 
       { 
        var builds = buildService.QueryBuilds(buildDefinition); 
        foreach (var buildDetail in builds) 
        { 
         var changesets = InformationNodeConverters.GetAssociatedChangesets(buildDetail); 
         if (changesets.Any(changesetSummary => changesetSummary.ChangesetId == Convert.ToInt32(args[0]))) 
         { 
          Console.WriteLine("Changeset was build in "+buildDetail.BuildNumber); 
         } 
        } 
       } 
      } 
     } 
    } 
} 

hace falta decir que esto es un ataque de fuerza bruta.
Puede refinar aún más el código si reduce la lista de buildDefinition, haga foco en teamProjects específico etc. ¡En cualquier caso, no puedo imaginar que lo anterior sea útil tal como está!

Además de (obviamente) MSDN, un gran recurso para TFS-SDK es blog de Shai Raiten.
Para ejemplos de Build-Speficic, consulte también here & here para algunas publicaciones SO posiblemente interesantes.

+0

¡Gracias! Ojalá hubiera más opciones de filtrado disponibles al consultar; tenemos varias compilaciones para las que estamos reteniendo información y lleva mucho tiempo para que vuelvan las consultas. Voy a experimentar y ver. –

2

Puede utilizar este pequeño DB Query en TFS 2010 y simplemente sustituir 90264 con su id de conjunto de cambios.

USE Tfs_Warehouse 
go 
SELECT BuildName 
FROM DimBuild 
    INNER JOIN FactBuildChangeset 
    ON DimBuild.BuildSK = FactBuildChangeset.BuildSK 
WHERE FactBuildChangeset.ChangesetSK = 90264 
Cuestiones relacionadas