【问题标题】:AzureDevOps Build Rest API: How to get all Warning count in build Task, exceed the limit of 10AzureDevOps Build Rest API:如何获取构建任务中的所有警告计数,超过 10 的限制
【发布时间】:2020-07-23 01:29:19
【问题描述】:

我正在尝试在 AzureDevOps 项目中获取构建任务的警告数。但我仍然只收到前 10 个警告。你是怎么做到的?我特别需要警告的数量,不一定是警告的细节

var credential = new VssBasicCredential(string.Empty, myPat);
var connection = new VssConnection(new Uri(myCollection), credential);
var buildClient = connection.GetClient<BuildHttpClient>();
var timeline = buildClient.GetBuildTimelineAsync(myProject, myBuildId).Result;
var vsTask= timeline.Records.FirstOrDefault(p => p?.Task?.Name == "VSBuild");
// always 10 utmost  : warning and issues !!
var warning = vsTask.WarningCount;
var issues =  vsTask.Issues;

【问题讨论】:

    标签: tfs azure-devops azure-pipelines tfsbuild azure-pipelines-build-task


    【解决方案1】:

    这真的很奇怪,但看起来你不能超越这里显示的内容

    有解决方法(但有点难看)。您可以加载日志页面并计算解析页面的警告。

    static void Main(string[] args)
    {
        var credential = new VssBasicCredential(string.Empty, "PAT");
        var connection = new VssConnection(new Uri("https://dev.azure.com/your-organization/"), credential);
        var buildClient = connection.GetClient<BuildHttpClient>();
        var timeline = buildClient.GetBuildTimelineAsync("yoyr project", 377).Result;
    
        var vsTask = timeline.Records.FirstOrDefault(p => p?.Task?.Name == "VSBuild");
        // always 10 utmost  : warning and issues !!
        var warning = vsTask.WarningCount;
        var issues = vsTask.Issues;
        Console.WriteLine(warning);
    
    
        HttpClient client = new HttpClient();
        var response =  client.GetAsync(vsTask.Log.Url);
        var pageContents = response.Result.Content.ReadAsStringAsync().Result;
        var realNumberOfWarnings = AllIndexesOf(pageContents, "##[warning]");
        Console.WriteLine(realNumberOfWarnings.Count);
        Console.ReadLine();
    }
    
    public static List<int> AllIndexesOf(string str, string value)
    {
        if (String.IsNullOrEmpty(value))
            throw new ArgumentException("the string to find may not be empty", "value");
        List<int> indexes = new List<int>();
        for (int index = 0; ; index += value.Length)
        {
            index = str.IndexOf(value, index);
            if (index == -1)
                return indexes;
            indexes.Add(index);
        }
    }
    

    我希望它会有所帮助。

    请查看黄廷洛 [MSFT] 写的here

    我们应该只计算和存储 10 个错误/警告(我猜我们有 一些计数错误,所以我们数到 11),这些问题存储在我们的 用于驱动构建摘要页面呈现的后端数据库。我们不想 存储太多错误/警告,因为大多数时候是前几个 错误/警告是问题的关键,其余的只是噪音。

    【讨论】:

    • 非常感谢,是的,这似乎是一个限制。这是一个耻辱。留在经过身份验证的上下文中 var logs = buildClient.GetBuildLogLinesAsync(myProject, myBuildId, vsTask.Log.Id).Result; var warningCount = logs.Count(p => p.Contains("##[warning]"));
    • 当然可以。我有公共管道,因此我可以像以前那样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 2020-01-21
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多