DevOps - рабочие элементы обновления API на нескольких уровнях - PullRequest
0 голосов
/ 26 октября 2018

У меня есть функция Azure с HTTP-триггером, вызываемая сервис-хуком из DevOps.При каждом обновлении рабочего элемента также должны обновляться все дочерние элементы этого элемента, включая их дочерние элементы и т. Д.Я программирую на C #.

В качестве ответа на мой предыдущий вопрос: Microsoft DevOps & Azure Функции: внедрение рекурсивных обновлений , я получил рекомендацию по внедрению функции оркестровки для сокращения жизненных циклов функций.

Я сделал это, и теперь мои функции выглядят так:

  1. SynchronizeStatus_HttpStart.cs -> реализует триггер http и вызывает функцию оркестратора с обработанным HttpRequest в качестве параметра.

    string instanceId = await orchestrationClient.StartNewAsync("SynchronizeStatus", workItem);

  2. SynchronizeStatus.cs -> реализует OrchestratorTrigger и предназначен для вызова функции UpdateChildren для элемента, вызвавшего запрос

    await context.CallActivityAsync<string>("SynchronizeStatus_UpdateChild", sourceItem);

  3. SynchronizeStatus_UpdateChildren -> реализует ActivityTrigger и принимает в качестве параметра элемент Workitem.Затем он запрашивает все дочерние рабочие элементы, обновляет поле System.State до значения из исходного элемента и исправляет все дочерние элементы в DevOps.

    var childWorkItemUris = parentWorkItem.Relations .Where(x => x.Rel.Equals("System.LinkTypes.Hierarchy-Forward")) .Select(x => new Uri(x.Url));

        var childWorkItems = await vstsClient.GetWorkItemsAsync(childWorkItemUris);
    
        foreach (var item in childWorkItems)
        {
            Console.WriteLine(item.Url);
            item.Fields.SystemState = parentWorkItem.Fields.SystemState;
            await vstsClient.UpdateWorkItem(item);
        }
    

Прямо сейчас возможно обновить всех прямых потомков с первого рабочего элемента.Мой вопрос, какой цикл мне нужно реализовать, чтобы пройти через все возможные уровни.Я думаю, что это будет примерно так:

  • Orchestrator зацикливается на «SynchronizeStatus_UpdateChildren» до тех пор, пока какое-либо условие не станет ложным
  • SynchronizeStatus_UpdateChildren возвращает список всех дочерних элементов, которые используются в оркестраторе, дляоценить, нужно ли все еще циклы

Но я действительно не уверен, как именно это можно сделать.

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