基于TFS SDK获取TFS2018各团队项目的构建代理ID及代理队列ID
获取TFS2018构建代理ID与代理队列ID列表(API + SDK实现)
嘿,刚好我之前在处理TFS 2018的集成需求时,折腾过这两个场景,给你整理了REST API和SDK两种方式的具体实现,直接就能用:
一、使用TFS2018 REST API获取不同团队项目的构建代理ID
要拿到每个项目的构建代理ID,得先定位到对应的代理池,再拉取池内的代理列表:
第一步:先获取目标集合下的所有代理池,拿到对应项目的池ID
请求端点:GET http://{tfs-server}:8080/tfs/{collection}/_apis/distributedtask/pools?api-version=4.1返回结果里的
id字段就是代理池ID,你可以通过name字段匹配到项目对应的池。第二步:根据池ID获取该池下的所有构建代理
请求端点:GET http://{tfs-server}:8080/tfs/{collection}/{project}/_apis/distributedtask/pools/{poolId}/agents?api-version=4.1示例curl请求(用用户名密码或者PAT认证):
curl -u your-username:your-password-or-pat "http://tfs2018:8080/tfs/DefaultCollection/MyProject/_apis/distributedtask/pools/2/agents?api-version=4.1"返回的JSON数组中,每个代理对象的
id字段就是你要的构建代理ID,同时还能看到代理的状态、名称、所属池等信息。
二、使用TFS SDK获取代理队列ID列表
如果你用.NET开发,用官方SDK会更方便,步骤如下:
- 先安装NuGet包:
Install-Package Microsoft.TeamFoundationServer.Client - 编写C#代码示例(支持PAT或域账号认证):
代码里的using Microsoft.TeamFoundation.DistributedTask.WebApi; using Microsoft.VisualStudio.Services.Common; using System; using System.Linq; class TfsQueueHelper { static void Main(string[] args) { // 配置TFS地址、集合和项目信息 var tfsUri = new Uri("http://tfs2018-server:8080/tfs/DefaultCollection"); var targetProject = "YourTargetProject"; // 用PAT认证(如果是域环境,换成VssWindowsCredential()即可) var credentials = new VssBasicCredential(string.Empty, "your-personal-access-token"); // 创建任务客户端并获取队列列表 using (var taskClient = new TaskAgentHttpClient(tfsUri, credentials)) { // 获取指定项目的代理队列,不传项目名则返回集合下所有队列 var queues = taskClient.GetAgentQueuesAsync(targetProject).Result; // 输出队列ID和名称 foreach (var queue in queues) { Console.WriteLine($"代理队列ID: {queue.Id} | 名称: {queue.Name}"); } } } }TaskAgentQueue对象包含了队列的所有信息,Id就是你需要的队列ID。
内容的提问来源于stack exchange,提问作者doorman
相关产品推荐
相关产品推荐

