Azure Devops - 按代理池 ID 获取发布定义

2023-12-29

我试图使用 .NET 客户端库查找配置为使用特定代理池的所有构建和版本。

假设agentPoolId,我可以得到所有的构建定义,如下所示:

// _connection is of type VssConnection
using (var buildClient = _connection.GetClient<BuildHttpClient>())
{
    List<BuildDefinitionReference> allBuilds = await buildClient.GetDefinitionsAsync(projectName, top: 1000, queryOrder: DefinitionQueryOrder.DefinitionNameAscending);
    List<BuildDefinitionReference> builds = allBuilds.Where(x => HasAgentPoolId(x, agentPoolId)).ToList();
}

private bool HasAgentPoolId(BuildDefinitionReference buildDefinition, int agentPoolId)
{
    TaskAgentPoolReference pool = buildDefinition?.Queue?.Pool;

    if (pool == null)
    {
        return false;
    }

    return pool.Id.Equals(agentPoolId);
}

但我找不到一种方法来查找将一个或多个环境配置为使用特定代理的发布定义。有什么建议吗?


我设法通过 Rest Api 而不是通过 NET 客户端库通过代理池 ID 获取所有版本。希望有帮助。

C# 代码片段:

public class ReleaseResponse
{
     [JsonProperty("value")]
     public List<ReleaseItem> Value { get; set; }
}

public class ReleaseItem
{
     [JsonProperty("name")]
     public string Name { get; set; }

     [JsonProperty("Id")]
     public int Id { get; set; }
}

static void Main(string[] args)
{
     string tfsURL = "TFS URL";
     string releaseDefurl = $"{tfsURL}/_apis/release/definitions?$expand=artifacts&api-version=3.2-preview.3";
     const int agentPoolID = "AGENT Pool ID";
     List<string> relevantReleases = new List<string>(); 
     WebClient client = new WebClient();
     client.UseDefaultCredentials = true;
     client.Headers.Add("Content-Type", "application/json");
     var releaseList = client.DownloadString(releaseDefurl);
     var allReleases = JsonConvert.DeserializeObject<ReleaseResponse>(releaseList).Value;
     foreach (var release in allReleases)
     {
           string releaseInfoApi = $"{tfsURL}/_apis/Release/definitions/{release.Id}";
           var getReleseInfo = client.DownloadString(releaseInfoApi);
           var releaseInfo = JsonConvert.DeserializeObject<TFSLogic.RootObject>(getReleseInfo);
           var deploymentAgents = releaseInfo.environments.ToList().Where(e => e.deployPhases.FirstOrDefault().deploymentInput.queueId == agentPoolID).Count();
           if (deploymentAgents > 0)
           {
               relevantReleases.Add(release.Name);
           }

     }

}

在这里找到 TFSLogic :https://codebeautify.org/online-json-editor/cb7aa0d9 https://codebeautify.org/online-json-editor/cb7aa0d9

Powershell代码片段:

$tfsUrl = "TFS URL"
$releaseDefurl = $tfsUrl + '/_apis/release/definitions?$expand=artifacts&api-version=3.2-preview.3'
$agentPoolID = "Agent Pool ID"
$relevantReleases = @();
$allReleasesID = (Invoke-RestMethod -Uri ($releaseDefurl) -Method Get -UseDefaultCredentials).value.id

function getReleaseByAgentPoolID($releaseID,$agentPoolID)
{
    $ReleaseInfo = Invoke-RestMethod -Uri "$tfsUrl/_apis/Release/definitions/$releaseID" -Method Get -UseDefaultCredentials

    $deploymentAgents = $ReleaseInfo.environments | % {$_.deployPhases.deploymentInput.queueId} | where {$_ -eq $agentPoolID}

    if($deploymentAgents.Count -gt 0)
    {
        return $ReleaseInfo.name
    }
}


foreach ($releaseID in $allReleasesID)
{
    $relevantReleases += getReleaseByAgentPoolID -releaseID $releaseID -agentPoolID $agentPoolID   
}

UPDATE :

我花了一些时间,但我能够做到这一点azure-devops-dotnet-样本 https://github.com/Microsoft/azure-devops-dotnet-samples我希望这个例子最终是您所寻找的。

using Microsoft.VisualStudio.Services.WebApi;
using System;
using System.Linq;
using Microsoft.VisualStudio.Services.ReleaseManagement.WebApi.Clients;
using Microsoft.VisualStudio.Services.ReleaseManagement.WebApi.Contracts;
using Microsoft.VisualStudio.Services.Common;
using System.Collections.Generic;

namespace FindReleaseByAgentPoolID
{
    class Program
    {
        const int agentPoolID = 999;
        static void Main(string[] args)
        {
            var relevantReleases = new List<string>();
            VssCredentials c = new VssCredentials(new WindowsCredential(System.Net.CredentialCache.DefaultNetworkCredentials));
            var tfsURL = new Uri("TFS URL");
            var teamProjectName = "PROJECT";

            using (var connection = new VssConnection(tfsURL, c))
            using (var rmClient = connection.GetClient<ReleaseHttpClient2>())
            {
                var releases = rmClient
                    .GetReleaseDefinitionsAsync(teamProjectName, string.Empty, ReleaseDefinitionExpands.Environments)
                    .Result.ToArray();

                foreach (var release in releases)
                {
                    var r = rmClient.GetReleaseDefinitionAsync(teamProjectName, release.Id);
                    var deploymentAgents = r.Result.Environments.SelectMany(e =>
                     e.DeployPhases.Select(dp =>
                     dp.GetDeploymentInput()).Cast<DeploymentInput>()).Where(di =>
                     di.QueueId == agentPoolID).Count();

                    if (deploymentAgents > 0)
                    {
                        relevantReleases.Add(release.Name);
                    }
                }
            }
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Azure Devops - 按代理池 ID 获取发布定义 的相关文章

  • 如何将非静态类成员“std::bind”绑定到 Win32 回调函数“WNDPROC”?

    我正在尝试将非静态类成员绑定到标准WNDPROC http msdn microsoft com en us library ms633573 aspx功能 我知道我可以通过将类成员设为静态来简单地做到这一点 但是 作为一名 C 11 ST
  • 在 C 中匹配二进制模式

    我目前正在开发一个 C 程序 需要解析一些定制的数据结构 幸运的是我知道它们是如何构造的 但是我不确定如何在 C 中实现我的解析器 每个结构的长度都是 32 位 并且每个结构都可以通过其二进制签名来识别 举个例子 有两个我感兴趣的特定结构
  • 当我们想要返回对象的引用时,为什么我们在赋值运算符中返回 *this 而通常(而不是 this)?

    我正在学习 C 和指针 我以为我理解了指针 直到我看到这个 一方面 asterix 运算符是解引用的 这意味着它返回值所指向的地址中的值 而与号 运算符则相反 它返回值存储的地址记忆 现在阅读有关赋值重载的内 容 它说 我们返回 this因
  • 为什么 Google 测试会出现段错误?

    我是 Google Test 的新手 正在尝试提供的示例 我的问题是 当我引入失败并设置GTEST BREAK ON FAILURE 1 或使用命令行选项 GTest 将出现段错误 我正在考虑这个例子 https code google c
  • 由 IHttpClientFactory 注入时模拟 HttpClient 处理程序

    我创建了一个自定义库 它会自动为依赖于特定服务的 Polly 策略设置HttpClient 这是使用以下方法完成的IServiceCollection扩展方法和类型化客户端方法 一个简化的例子 public static IHttpClie
  • qdbusxml2cpp 未知类型

    在使用 qdbusxml2cpp 程序将以下 xml 转换为 Qt 类时 我收到此错误 qdbusxml2cpp c ObjectManager a ObjectManager ObjectManager cpp xml object ma
  • 如何在 32 位或 64 位配置中以编程方式运行任何 CPU .NET 可执行文件?

    我有一个可在 32 位和 64 位处理器上运行的 C 应用程序 我试图枚举给定系统上所有进程的模块 当尝试从 64 位应用程序枚举 32 位进程模块时 这会出现问题 Windows 或 NET 禁止它 我认为如果我可以从应用程序内部重新启动
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • Azure 辅助角色“请求输入之一超出范围”的内部异常。

    我在辅助角色中调用 CloudTableClient CreateTableIfNotExist 方法 但收到一个异常 其中包含 请求输入之一超出范围 的内部异常 我做了一些研究 发现这是由于将表命名为非法表名引起的 但是 我尝试为我的表命
  • C# 中的合并运算符?

    我想我记得看到过类似的东西 三元运算符 http msdn microsoft com en us library ty67wk28 28VS 80 29 aspx在 C 中 它只有两部分 如果变量值不为空 则返回变量值 如果为空 则返回默
  • “接口”类似于 boost::bind 的语义

    我希望能够将 Java 的接口语义与 C 结合起来 起初 我用过boost signal为给定事件回调显式注册的成员函数 这非常有效 但后来我发现一些函数回调池是相关的 因此将它们抽象出来并立即注册所有实例的相关回调是有意义的 但我了解到的
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 如何在非控制台应用程序中查看 cout 输出?

    输出到调试窗口似乎相当繁琐 我在哪里可以找到cout如果我正在编写非控制台信息 则输出 Like double i a b cout lt lt b lt lt endl I want to check out whether b is z
  • 按 Esc 按键关闭 Ajax Modal 弹出窗口

    我已经使用 Ajax 显示了一个面板弹出窗口 我要做的是当用户按 Esc 键时关闭该窗口 这可能吗 如果有人知道这一点或以前做过这一点 请帮助我 Thanks 通过以下链接 您可以通过按退出按钮轻松关闭窗口 http www codepro
  • 不同类型指针之间的减法[重复]

    这个问题在这里已经有答案了 我试图找到两个变量之间的内存距离 具体来说 我需要找到 char 数组和 int 之间的距离 char data 5 int a 0 printf p n p n data 5 a long int distan
  • 方法优化 - C#

    我开发了一种方法 允许我通过参数传入表 字符串 列数组 字符串 和值数组 对象 然后使用这些参数创建参数化查询 虽然它工作得很好 但代码的长度以及多个 for 循环散发出一种代码味道 特别是我觉得我用来在列和值之间插入逗号的方法可以用不同的
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装
  • System.IO.FileNotFoundException:找不到网络路径。在 Windows 7 上使用 DirectoryEntry 对象时出现异常

    我正在尝试使用 DirectoryEntry 对象连接到远程 Windows 7 计算机 这是我的代码 DirectoryEntry obDirEntry new DirectoryEntry WinNT hostName hostName
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • 从列表中选择项目以求和

    我有一个包含数值的项目列表 我需要使用这些项目求和 我需要你的帮助来构建这样的算法 下面是一个用 C 编写的示例 描述了我的问题 int sum 21 List

随机推荐

  • 在 perl 中匹配日期

    我想匹配日 月 年格式的日期 其中日是两位数 月份是两位数 年份是四位数 另外 我想检查它是否是一个有效的日期 例如知道什么时候是闰年 并知道哪个月份有 30 天 31 天和 28 天或 29 天的二月 看看类似的东西日期 马尼普 http
  • 如何在 Maven 中为生成的源创建文件夹?

    我必须使用 wsimport 生成源 并且我假设它应该转到 target generated sources wsimport 而不是 src main java 问题是 wsimport 需要在执行之前创建目标文件夹 但它失败了 我可以先
  • 在 PyCharm 中安装气流包附加功能

    我想用Airflow https airflow incubator apache org 包裹extras https packaging python org installing installing setuptools extra
  • 启用 ActiveX 控件以引发事件,而无需在 System.Windows.Forms.Application 中运行

    我们的团队正在编写一些需要我们与网络设备交互的代码 该设备使用专有协议 制造商以OCX控件 即ActiveX控件 的形式向我们提供了接口库 我在尝试使用 ActiveX 控件时遇到了几次错误 例如使用包装在 C CLI 中的本机 C MFC
  • Sql Server 2008 sp_executesql 语法帮助 - 我认为我的引用不正确

    使用 SQL Server 2008 我尝试构建一个字符串并使用 sp executesql 执行它 我显然有一些引用是错误的 它似乎正在运行 但数据库并未删除 有人可以帮我纠正语法吗 USE master GO DECLARE sql N
  • 随机数表现得很奇怪,不是完全随机的

    在我的 NET 游戏中 我的 rand 函数决定玩家的五个角色中的每个角色应承受多少伤害 但是第一个角色似乎总是位于标度的底部 而最后一个角色则位于顶部 所以在我的Character 0 伤害很少比最小兰特值大 1 以上 并且对于每个Cha
  • IE 9 和 Firefox 13 中的内容处置被忽略

    我正在尝试动态创建一个内联 PDF 当用户选择保存它时 会提示我的自定义文件名 根据文档 http help adobe com en US ColdFusion 9 0 CFMLRef WSc3ff6d0ea77859461172e081
  • 获取应用程序的第一个 Key Vault 机密值时出现异常

    在我的应用程序中 当我的应用程序获取第一个密钥保管库机密的值时 我遇到异常 仅当我从异常设置中打开 公共语言运行时异常 时 才会出现异常 我得到的例外是 Microsoft Rest TransientFaultHandling HttpR
  • java.lang.ClassFormatError:类中的字段修饰符非法

    我正在尝试使用实现一个简单的 TabGroup环境服务 http tapestry apache org environmental services html 我的代码如下所示 public class TabPanel Inject p
  • 如何仅使用 SwiftUI 从 @main App 访问 NSWindow?

    At this answer https stackoverflow com a 60359809 4307080该解决方案适用于 Scene 和 swiftUI 但是使用 main 像 main struct MyApp App Stat
  • 如何指定 postgres 表的主键种子?

    我有一个 postgres 表 其中包含数据 其中主键已由注入数据的代码设置 假设主键是 0 49 如何指示 postgres 在下一次插入的主键列上以 50 开头 目前 所有没有设置主键的插入都会导致重复的 ID 问题 因为它从 0 开始
  • 尽管 magic_quotes 已关闭,但仍转义字符串?

    我在 php ini 中禁用了 magic quotes 但我的表单中仍然会出现转义字符串 注意 我在 WordPress 的主题中运行它 我实际上已经弄清楚了这一点 只是想将我的解决方案留在这里 以防其他人可能会发现它有用 WordPre
  • 访问对话流履行中先前的后续意图参数

    我使用内联编辑器中提供的默认对话流代码 基于dialogflow fulfillment 0 5 0 来整理多个后续意图中给出的所有参数 我有一个设置 其中后续意图提出问题 从而产生提出所有问题的最终意图 从对话框流控制台内以前的意图中提取
  • 为什么 element.click() 在 Cefsharp 中不起作用?

    我尝试执行下面的脚本Cefsharp单击 DIV 元素 但不起作用 private static string ClickUnreads function let chatsEl document querySelectorAll infi
  • 简化的行梯形形式

    R中是否有一个函数可以产生reduced row echelon form的矩阵 This http cran r project org doc contrib Hiebeler matlabR pdf参考文献说没有 你同意 I don
  • Objectify 库可以在 GAE 之外使用吗?

    我想使用 Google Cloud 数据存储区 不过 我没有使用GAE 我还可以使用 Objectify 库吗 如果是这样怎么办 该文档没有说明如何配置它以针对数据存储进行身份验证 不 你不能 这里有一个来自创作者的评论 https gro
  • 如何在 C# 中基于现有委托类型创建新的委托类型?

    有什么方法可以基于现有的委托类型创建新的委托类型吗 就我而言 我想创建一个委托MyMouseEventDelegate其功能与EventHandler
  • 如何隐藏 Mac/OSX 拖放 JTable 选择框

    在 JTable 上执行拖放操作时 拖动时会出现所选单元格 选择框 的轮廓 我怎样才能覆盖该行为并且除了特殊光标之外不显示任何内容 在 Windows 和 OSX 中运行以下代码显示了我想要覆盖的行为 import java awt Bor
  • ASP.NET 身份检查用户角色不起作用

    我有一个 ASP NET MVC 5 应用程序 我使用标准 ASP NET 身份提供程序进行用户和角色管理 重要的是我使用自己的存储库项目中的 IdentityUser 但这似乎没问题 我可以注册 登录 编辑用户并管理他们的角色 我使用以下
  • Azure Devops - 按代理池 ID 获取发布定义

    我试图使用 NET 客户端库查找配置为使用特定代理池的所有构建和版本 假设agentPoolId 我可以得到所有的构建定义 如下所示 connection is of type VssConnection using var buildCl