Как я могу ускорить наши сборки TeamCity?

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

Большая часть поступает из установочных файлов и других несущественных (несущественных) (для сборки) вещей, которые люди проверяют в SVN.

Мы просто запускаем базовую бесплатную версию и имеем 3 агентов. Наш режим проверки VCS - "Автоматически на сервере". Оба файла решения - C#, и мы используем скрипт MSBuild.

Я полюбил раздел правил оформления заказа в конфигурации сборки, но прочитал, что он не будет работать, потому что он выбирает весь код, а затем применяет правила, которые побеждают объект, если вы спросите меня.

Сборка теперь занимает около 1 часа, но если бы я мог просто заставить TeamCity получить нужный ей код и ничего больше, то, я думаю, я мог бы сократить его до 10 минут или меньше.

Я нашел несколько статей, которые исключают файлы и папки, использующие MSBuild, но я не могу найти ничего в наших скриптах сборки о загрузке из SVN, и я думаю, что TeamCity делает это.

Кто-нибудь может предложить какие-либо изменения, которые мы можем внести, или хорошие статьи по созданию сборки с нуля с помощью TeamCity и MSBuild, которые позволили бы мне выбирать, что выбрать из SVN?

Благодарю.

1 ответ

Решение
  1. Сборка только то, что меняется.
  2. Сборки CI не должны делать все то, что делает сборка выпуска. Все, что нужно CI - это скомпилировать и выполнить некоторую проверку.
  3. Решения, иногда разработчики помещают нагрузки в любой отдельный sln. Если у вас есть множество сервисов в одном sln, и он собирается каждый раз, когда меняется только одно? Так что разделите их - по одному sln на каждый вывод (я имею в виду exe или службу или что-то еще, не одну DLL)
  4. Распараллелить сборку. Иметь разные цели сборки для каждого выхода (в TeamCity)
  5. Построить артефакты, развернуть артефакты. Это означает, что вам никогда не придется ждать завершения сборки для развертывания.

Десятиминутная синхронизация - все еще очень долгое время для SVN, это действительно должно произойти, сколько времени это займет в командной строке? Переместить не связанные со сборкой предметы в другое хранилище?

Имея большую базу кода и svn, рассмотрите возможность создания основных компонентов в разделе проверенных двоичных файлов / ссылок в Svn. Это позволяет вам делиться созданными объектами с другими командами, а не тратить время на создание их кода.

Надеюсь, это поможет?

Другие вопросы по тегам