通过TFS API从Visual Studio Online获取构建定义

本文关键字:Online 获取 构建 定义 Studio Visual TFS API 通过 | 更新日期: 2023-09-27 18:03:57

我通过TFS API从Visual Studio Online项目检索构建信息时遇到了问题。我可以连接到项目,似乎,并找到预期的团队项目集合和团队项目,但尽管项目有两个构建定义和一些构建,TFS API总是返回零长度数组给我查询构建定义或构建。该项目是一个Git项目。我的生产代码类似于我为调试问题而编写的测试代码:

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<IBuildServer>();
var buildDefinitions = buildServer.QueryBuildDefinitions(tp.Resource.DisplayName);

buildDefinitions总是一个空数组。构建定义肯定是在那里——我可以用Visual Studio连接到项目,它会在Team Explorer的Builds选项卡中显示它们。这段代码在过去为我工作过,但它一直是我连接的TFVC项目,而不是Git项目。有趣的是,如果我使用团队项目集合中的VersionControlServer,如下所示:

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

. .teamProjects总是一个零长度数组。

同样,如果我试图通过指定一个非常通用的构建细节规范来获取团队项目集合的所有构建,我将不会返回任何构建。

一些额外的信息:我正在使用VS企业2015 RC。我是VSO项目的管理员,并创建了团队项目集合、团队项目和构建定义。我推送了一些代码,运行了一些构建。通过API连接时,我以自己的身份登录。我的证件似乎是正确的。

所以,为了弄清楚这个问题,我有一些问题。我是否需要一种不同的方法来访问Git存储库?也许只有通过新的TFS 2015 REST api才能实现?也许我需要在VSO项目中使我的构建对我自己"可见"?

通过TFS API从Visual Studio Online获取构建定义

您可以利用BuildHttpClient发出与使用2.0 REST API类似的请求。

这个示例在GitHub上是一个非常好的资源,如果你宁愿投票一个项目,它应该看起来更像这样:

using System;
using System.Collections.Generic;
using Microsoft.TeamFoundation.Build.WebApi;
using Microsoft.VisualStudio.Services.Client;
static void GetBuildStatus()
{
    var tfsUrl = "http://<tfs url>:<port>/tfs/<collectionname>";
    var buildClient = new BuildHttpClient(new Uri(tfsUrl), new VssAadCredential());
    var definitions = buildClient.GetDefinitionsAsync(project: "<projectmame>");
    var builds = buildClient.GetBuildsAsync("<projectname>";
    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()));
    }
}

我相信你是对的,我刚刚在一个GIT项目上对我自己的VSO测试了你的代码,我无法检索任何构建。vNext构建,但是我可以检索旧的XAML构建定义。

然后我尝试使用REST API,它也只能返回旧风格的XAML构建,直到我让它使用REST API的版本2,然后XAML和构建。vNext样式构建回来了。这是我在浏览器中尝试的一个示例字符串(确保您先登录到VSO来测试它)

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