Recupero delle definizioni di build da Visual Studio Online tramite API TFS

Sto riscontrando un problema nel recupero delle informazioni di build da un progetto di Visual Studio Online tramite l’API TFS. Posso connettermi al progetto, a quanto pare, e trovare la raccolta del progetto del team e il progetto del team previsti, ma nonostante il progetto abbia due definizioni di build e un certo numero di build, l’API TFS restituisce sempre array a lunghezza zero quando eseguo query per la compilazione definizioni o build. Il progetto è un progetto Git. Il mio codice di produzione è simile a questo codice di prova che ho scritto per tentare di eseguire il debug del problema:

var tfsUri = new Uri("https://[my project].visualstudio.com"); var tcs = new TfsConfigurationServer(tfsUri); var teamProjCollections = tcs .CatalogNode .QueryChildren( new[] { CatalogResourceTypes.ProjectCollection }, false, CatalogQueryOptions.None) .Select(collectionNode => new Guid(collectionNode.Resource.Properties["InstanceId"])) .Select(collectionId => tcs.GetTeamProjectCollection(collectionId)); var tpc = teamProjCollections .Single(x => x.Name == @"[my project].visualstudio.com\DefaultCollection"); var newTeamProjects = tpc .CatalogNode .QueryChildren( new[] { CatalogResourceTypes.TeamProject }, false, CatalogQueryOptions.None); var tp = newTeamProjects .Single(x => x.Resource.DisplayName == "[team project name]"); var buildServer = tpc.GetService(); var buildDefinitions = buildServer.QueryBuildDefinitions(tp.Resource.DisplayName); 

buildDefinitions è sempre un array vuoto. Le definizioni di build sono sicuramente disponibili: posso connettermi al progetto con Visual Studio e visualizzarle nella scheda Build di Team Explorer. Questo codice ha funzionato per me in passato, tuttavia erano sempre progetti TFVC a cui mi stavo connettendo, non un progetto Git. È interessante notare che, se uso un VersionControlServer dalla raccolta del progetto del team, in questo modo:

 var vcs = tpc.GetService(); var teamProjects = vcs.GetAllTeamProjects(true); 

.. teamProjects è sempre un array a lunghezza zero.

Inoltre, se provo a ottenere tutte le build per la raccolta del progetto team specificando una specifica dei dettagli di compilazione molto generica, non viene restituito alcun build.

Alcune informazioni aggiuntive: sto usando VS Enterprise 2015 RC. Sono l’amministratore del progetto VSO e ho creato la raccolta del progetto del team, il progetto del team e le definizioni di build. Ho spinto un po ‘di codice ed eseguito alcune build. Ho effettuato l’accesso come me stesso durante la connessione tramite l’API. Le mie credenziali sembrano corrette.

Quindi, nel tentativo di capirlo, ho alcune domande. Ho bisogno di un approccio diverso per accedere a un repository Git? Forse è ansible solo attraverso le nuove API REST di TFS 2015? Forse ho bisogno di rendere le mie build “visibili” a me stesso nel progetto VSO?

Puoi utilizzare BuildHttpClient per creare richieste simili come faresti con l’API REST 2.0.

Questo esempio su GitHub è una risorsa piuttosto buona, se preferisci eseguire il polling di un singolo progetto dovrebbe sembrare qualcosa di più:

 using System; using System.Collections.Generic; using Microsoft.TeamFoundation.Build.WebApi; using Microsoft.VisualStudio.Services.Client; static void GetBuildStatus() { var tfsUrl = "http://:/tfs/"; var buildClient = new BuildHttpClient(new Uri(tfsUrl), new VssAadCredential()); var definitions = buildClient.GetDefinitionsAsync(project: ""); var builds = buildClient.GetBuildsAsync(""; foreach (var build in builds.Result) { Console.WriteLine(String.Format("{0} - {1} - {2} - {3}", build.Definition.Name, build.Id.ToString(), build.Status.ToString(), build.StartTime.ToString())); } } 

Credo che tu abbia ragione Ho appena testato il tuo codice contro il mio VSO su un progetto GIT e non riesco a recuperare alcun build.vNext, tuttavia posso recuperare le vecchie definizioni di build XAML.

Ho quindi provato a utilizzare l’ API REST e anch’esso è stato in grado di restituire solo le build XAML vecchio stile fino a quando non l’ho utilizzato per utilizzare la versione 2 dell’API REST e quindi sono tornate le build in stile XAML e build.vNext. Ecco una stringa di esempio che ho provato nel mio browser (assicurati di aver effettuato l’accesso a VSO per testarlo)

 https://[vsoname].visualstudio.com/defaultcollection/[project]/_apis/build/definitions?api-version=2.0