Может быть, это просто мечта сумасшедшего, но ..
В моей компании у нас большой проект на C # .NET, с ~ 25 решениями (очень старыми) и ~ 3,5 млн.Loc.Проблемы, с которыми я сталкиваюсь: слишком медленное время сборки, сейчас это занимает 7 минут с SSD (dev-машины), 15 минут + в виртуальной машине с обычными жесткими дисками (это будет система сборки TeamCity, которую я хотел бы развернуть).Я знаю, что система сборки должна быть самой быстрой, но я ничего не могу изменить в краткосрочной перспективе.
Я хочу сократить цикл обратной связи commit-build-unittest для разработчиков (желательно сейчас на компьютере Teamcity)просто скомпилировав проект (ы), которые были затронуты последним коммитом, взяв все остальные сборки, например, с локального сервера nuget (сам сервер Teamcity с версией 7.0).
Теперь это будет безмерно сократить цикл обратной связи (от 15 минут до менее минуты, учитывая реальные модульные тесты) для небольших коммитов.
Я знаю, что проблема такой частичной компиляции заключается в возможности пропускаошибки компиляции (несоответствие интерфейсов может остаться незамеченным), но это можно было бы устранить, запустив второй (Teamcity?) экземпляр сервера сборки, который выполняет всю энчиладу параллельно.Но получение первой обратной связи немедленно очень важно для меня.
Теперь мой вопрос: есть ли система сборки / система непрерывной интеграции, которая может справиться с этой задачей?Или мне придется написать свой собственный фоновый сервис с поддержкой фиксации?Это было бы немного неприятно, так как мы используем FinalBuilder Scripts, и этот формат, кажется, не читается никаким API (но недостаточно углублен в это).
PS: Также я хотел бы запускать модульные тесты только для проектов, которые были изменены последним коммитом, или, по крайней мере, расставлять приоритеты.Но это запоздалая мысль.