TFS: Abfrage nach Builds, die ein bestimmtes Changeset enthalten

Ich habe eine Reihe von Build-Definitionen, die basierend auf einem einzelnen Zweig in TFS ausgeführt werden (z. B. Main).

Ich möchte (irgendwie) TFS abfragen, um alle Builds zu finden, die eine bestimmte Änderungssatznummer enthalten, die ich bereitstelle, und eine Liste der Namen der Builds zurückgeben, die TFS enthält. Jede Art von App (VS-Erweiterung, CLI-App, Winforms, was auch immer) kann verwendet werden.

Hinweis: Dies ist keine "Bitte gib mir den Code" -Anforderung. Ich bin bereit, es zu hacken und ernsthaft daran zu arbeiten. Alle Verweise auf die Dokumentation zum Abfragen der Datenbank oder des SDK oder ein Beispiel zum Abfragen von Builds. Nur ein Ort, an dem man anfangen kann zu suchen, wäre äußerst hilfreich. Vielen Dank.

Antworten auf die Frage(2)

0264 durch Ihre Änderungssatz-ID ersetzen.

<code>USE Tfs_Warehouse
go
SELECT BuildName 
FROM DimBuild
   INNER JOIN FactBuildChangeset
   ON DimBuild.BuildSK = FactBuildChangeset.BuildSK
WHERE FactBuildChangeset.ChangesetSK = 90264
</code>
Lösung für das Problem

jekte einer Sammlung und überprüft jeden Build auf eine Zuordnung zur eingegebenen Änderungssatznummer:

<code>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);
                        }
                    }
                }
            }
        }
    }
}
</code>

Unnötig zu erwähnen, dass dies ein Brute-Force-Angriff ist.
Sie können den Code weiter verfeinern, wenn Sie die Liste der eingrenzenbuildDefinition, konzentrieren Sie sich auf bestimmteteamProjects usw. Auf jeden Fall kann ich mir kaum vorstellen, dass das obige so nützlich ist, wie es ist!

Abgesehen von (offensichtlich)MSDN, eine großartige Ressource für TFS-SDK ist Shai Raiten'sBlog.
Überprüfen Sie auch Build-Speficic-BeispieleHier & Hier für einige möglicherweise interessante SO Beiträge.

 J. Polfer05. Apr. 2012, 17:18
Vielen Dank! Ich wünschte, es gäbe mehr Filteroptionen bei der Abfrage; Wir haben eine Reihe von Builds, für die wir Informationen aufbewahren, und es dauert sehr lange, bis Abfragen zurückkehren. Ich werde experimentieren und sehen.

Ihre Antwort auf die Frage