Всем привет! Я расскажу о том как можно написать простой поиск коммитов в Azure DevOps. Те кто не любит много букв, могут сразу перейти к коду. Зачем же понадобился свой "велосипед" в дополнение к стандартному поиску?

В данный момент мы используем микросервисную архитектуру. Каждый сервис живет в своем отдельном репозитарии. Как следствие общее число репозитариев у нас довольно большое (порядка 400), а для решения одной задачи по спринту зачастую приходится вносить изменения в несколько разных репозитариев.

Стандартный поиск великолепно ищет требуемое в исходниках. Но к сожалению он не умеет искать по коммитам. В итоге довольно тяжело и муторно искать коммиты, если они были разбросаны по нескольким репозитариям. Данная проблема озвучена 4 года назад и, возможно, когда-нибудь будет решена. Но так как ждать не очень интересно разработаем свой

Подход к решению задачи

  1. Вычитываем всю нужную информацию по коммитам.

  2. Сохраняем информацию в Elastic.

  3. Делаем поиск в Elastic.

Получение информации по коммитам

Для получения коммитов я использовал стандартного клиента. Реализация в этом модуле.

К сожалению, нельзя вычитать коммиты без привязки к репозиторию. То есть чтобы просто получить список коммитов нужно сделать по запросу на каждый репозиторий.

Коммиты интересны конечно же в основной бранч. Компания у нас продвинутая, и так как слово master внезапно стало оскорбительным, в части репозиториев основной бранч именуется как main. К двойному сожалению в критерии для поиска коммитов можно задать только один бранч.

Сохранение информации в Elastic

Для работы с Elastic я использовал стандартного клиента Nest. Реализация в этом модуле.

Для сохранения потребуется создать индекс. В индексе помимо свойств коммита используется аггрегирующее свойство AllData. Таким образом можно будет искать сразу по всем свойствам через And.

Для ускорения процесса документы в Elastic добавляются не по одному, а батчами. Не забываем проверять результат добавления на успешность.

Автоматизация процесса

Сделана с помощью Azure Functions. Функция UpdateIndexFunction каждые полчаса инкрементально обновляет информацию по коммитам в Elastic. Функция SearchFunction реализует клиентские запросы на поиск.

Входные параметры задаются здесь.

Данный файл можно использовать с клиента для поиска и отображения результатов (нужно будет подправить url на задеплоенный)

Интеграция c Jira

В предыдущей статье я рассказывал о том, как можно получить информацию из Jira. Соответственно данный поиск можно расширить за счет информации из Jira, а именно к каждому коммиту привязать номер\summary задачи, номер\summary родительской задачи, название команды, название спринта и т.д. В итоге можно будет с легкостью находить коммиты по самым разным запросам - например - 'найти все коммиты для данной истории', 'найти все коммиты команды за предыдущий спринт' и т.д.

P.S.

В итоге получаем возможность искать требуемые коммиты по нужным запросам. Информация о коммитах автоматически обновляется. Поиск работает крайне шустро.
Данная фича будет наиболее востребована, когда коммиты для одной задачи попадают в разные репозитории. Так же пригодится новичкам в команде, чтобы находить коммиты для похожих задачек.

Всем спасибо за внимание!

Комментарии (0)