gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 00:18:43 25 4
gpt4 key购买 nike

我在通过 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 连接到项目,并将它们显示在团队资源管理器的“生成”选项卡中。这段代码过去对我有用,但我连接的始终是 TFVC 项目,而不是 Git 项目。有趣的是,如果我使用团队项目集合中的 VersionControlServer,如下所示:

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

..teamProjects 始终是零长度数组。

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

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

所以,在尝试解决这个问题时,我有一些问题。我是否需要不同的方法来访问 Git 存储库?也许只有通过新的 TFS 2015 REST API 才有可能?也许我需要让我的构建在 VSO 项目中对我自己“可见”?

最佳答案

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

sample在 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()));
}
}

关于c# - 通过 TFS API 从 Visual Studio Online 获取构建定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31533664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com