У меня есть функция Azure с HTTP-триггером, вызываемая сервис-хуком из DevOps.При каждом обновлении рабочего элемента также должны обновляться все дочерние элементы этого элемента, включая их дочерние элементы и т. Д.Я программирую на C #.
В качестве ответа на мой предыдущий вопрос: Microsoft DevOps & Azure Функции: внедрение рекурсивных обновлений , я получил рекомендацию по внедрению функции оркестровки для сокращения жизненных циклов функций.
Я сделал это, и теперь мои функции выглядят так:
SynchronizeStatus_HttpStart.cs -> реализует триггер http и вызывает функцию оркестратора с обработанным HttpRequest в качестве параметра.
string instanceId = await orchestrationClient.StartNewAsync("SynchronizeStatus", workItem);
SynchronizeStatus.cs -> реализует OrchestratorTrigger и предназначен для вызова функции UpdateChildren для элемента, вызвавшего запрос
await context.CallActivityAsync<string>("SynchronizeStatus_UpdateChild", sourceItem);
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 возвращает список всех дочерних элементов, которые используются в оркестраторе, дляоценить, нужно ли все еще циклы
Но я действительно не уверен, как именно это можно сделать.