AzureDevOps Build Rest API: как получить все количество предупреждений в задаче сборки, превысите предел 10 - PullRequest
1 голос
/ 10 апреля 2020

Я пытаюсь получить в проекте 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;

1 Ответ

1 голос
/ 10 апреля 2020

Это действительно странно, но похоже, что вы не можете go выше показанного здесь

enter image description here

Есть обходной путь (но это немного некрасиво). Вы можете загрузить страницу журнала и подсчитать количество предупреждений при разборе страницы.

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] здесь :

Мы должны только считать и хранить 10 ошибок / предупреждений (я думаю, что у нас есть какая-то ошибка подсчета, поэтому мы считаем до 11), эти проблемы сохраняются в нашей внутренней базе данных для управления рендерингом сводной страницы сборки. , Мы не хотим хранить слишком много ошибок / предупреждений, поскольку в большинстве случаев первые несколько ошибок / предупреждений являются ключом к проблеме, а остальные - просто шумом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...