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 获取发布定义 的相关文章

随机推荐

  • 在 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