Как я могу ускорить наши сборки TeamCity?
Наш репозиторий за последние месяцы несколько увеличился в размерах, и сборка TeamCity стала серьезно медленной.
Большая часть поступает из установочных файлов и других несущественных (несущественных) (для сборки) вещей, которые люди проверяют в SVN.
Мы просто запускаем базовую бесплатную версию и имеем 3 агентов. Наш режим проверки VCS - "Автоматически на сервере". Оба файла решения - C#, и мы используем скрипт MSBuild.
Я полюбил раздел правил оформления заказа в конфигурации сборки, но прочитал, что он не будет работать, потому что он выбирает весь код, а затем применяет правила, которые побеждают объект, если вы спросите меня.
Сборка теперь занимает около 1 часа, но если бы я мог просто заставить TeamCity получить нужный ей код и ничего больше, то, я думаю, я мог бы сократить его до 10 минут или меньше.
Я нашел несколько статей, которые исключают файлы и папки, использующие MSBuild, но я не могу найти ничего в наших скриптах сборки о загрузке из SVN, и я думаю, что TeamCity делает это.
Кто-нибудь может предложить какие-либо изменения, которые мы можем внести, или хорошие статьи по созданию сборки с нуля с помощью TeamCity и MSBuild, которые позволили бы мне выбирать, что выбрать из SVN?
Благодарю.
1 ответ
- Сборка только то, что меняется.
- Сборки CI не должны делать все то, что делает сборка выпуска. Все, что нужно CI - это скомпилировать и выполнить некоторую проверку.
- Решения, иногда разработчики помещают нагрузки в любой отдельный sln. Если у вас есть множество сервисов в одном sln, и он собирается каждый раз, когда меняется только одно? Так что разделите их - по одному sln на каждый вывод (я имею в виду exe или службу или что-то еще, не одну DLL)
- Распараллелить сборку. Иметь разные цели сборки для каждого выхода (в TeamCity)
- Построить артефакты, развернуть артефакты. Это означает, что вам никогда не придется ждать завершения сборки для развертывания.
Десятиминутная синхронизация - все еще очень долгое время для SVN, это действительно должно произойти, сколько времени это займет в командной строке? Переместить не связанные со сборкой предметы в другое хранилище?
Имея большую базу кода и svn, рассмотрите возможность создания основных компонентов в разделе проверенных двоичных файлов / ссылок в Svn. Это позволяет вам делиться созданными объектами с другими командами, а не тратить время на создание их кода.
Надеюсь, это поможет?