2012-11-21 2 views
1

Моя команда создает программное обеспечение на базе .NET и несколько других компонентов. В настоящее время, используя TeamCity для непрерывной интеграции, MSBuild просто компилирует файл .sln (плюс некоторые другие небольшие задачи, такие как модульные тесты).Непрерывное создание и поставка только измененных компонентов

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

Это делает его трудно только строить только измененные компоненты, но и доставить только те позже, как сборки артефактов.

Решения, такие как установка цели сборки на «Build» вместо «Rebuild», могут помочь здесь, но это кажется слишком хрупким, особенно при работе с распределенной средой сборки, где сборка может выполняться на любом количестве создайте «агенты», даже те, которые не имеют на них предыдущий результат компиляции.

Мне интересно, как правильно решить этот сценарий? Очевидно, это известная проблема, которая, вероятно, была обработана и обрабатывается многими.

Мы хотели бы построить и доставить (на сборку) набор DLL/компонентов, которые были изменены текущей сборкой (по кодовой проверке).

Какие методы мы можем реализовать для достижения этой цели?

ответ

2

Одно из решений - «строить» вместо «перестроить». Если сборка запускает несколько агентов, затем архивируйте артефакты сборки в конце процесса сборки в общем месте и скопируйте эти артефакты в пространство построения в начале следующей сборки (т. Е. Автоматизируйте архивирование артефактов в конце он строит и копирует его при начале сборки). Первая сборка завершится неудачно, потому что не будет никаких артефактов для копирования из ... следовательно, сохраните этот шаг, как продолжающийся при сбое, или вручную создайте это раньше. Запуск он сначала построил. Это, безусловно, увеличит время его сборки на минутку или два .... так что убедитесь, что общее местоположение находится в той же сети, что и ваши агенты сборки ...

0

Я не уверен, что у меня есть правильная проблема. Но, как я думаю, я понял, вам нужно работать с какой-то библиотекой активов, которая будет управлять вашими артефактами результатов сборки. После обновления актива можно настроить следующие действия.

Дайте мне знать, если это ответ на вашу проблему.

Лиора

+0

Можете ли вы предоставить дополнительную информацию? этот ответ не предоставляет никакой информации для решения конкретных вопросов, которые я поднял. –

1

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

Liora упоминает репозиторий активов. Это важно, так как это даст вам место для хранения всех этих маленьких библиотек. В .Net, я все больше и больше слышу о NuGet.

Идея состоит в том, что при внесении изменений в плагин ваша система CI подберет это, вытащит любые общие/разделяемые библиотеки и затем выполнит сборку, опубликовав новую версию этого плагина. Что происходит, когда общие изменения кода более интересны. Вы могли бы просто создать это, или вы могли бы запустить сборку всех своих иждивенцев.

я коснулся этого несколько лет назад в статье я писал о снижении боли управления сборки: http://www.urbancode.com/html/resources/articles/build-pain-relief/components.html

3

Это называется, как инкрементный строит и является частью процесса SCM в течение длительного времени. Сценарии Nant/msbuild должны иметь возможность делать как инкрементные сборки, так и полные сборки из CLI, иначе это не называется полной независимой установкой сборки для вашего процесса выпуска.

Подключите эти сценарии к CIE, например, buildforge, jenkins, cnuisecontrol и т. Д.

Лучший способ добиться этого - использовать переключатель в Nant/Ant/msbuild, чтобы при запуске инкрементных построений он не удалял старые двоичные файлы, а компилировал только последние изменения, чтобы создавать только изменения, связанные с кодом двоичные файлы.

У здания RTC Enterprise есть функция, которая отправляет доставку в ваш поток/ветвь, после того как она сгенерирует вашу локальную рабочую область после ее успешного компиляции, как инкрементную, так и полную сборку.

Но я бы порекомендовал нам достичь этого, используя скрипты сборки, а не пытаться достичь с помощью инструментов CIE, чтобы держатели кодов развития имели полный контроль над своей логикой сборки и упаковки и удаляли зависимость от инженера-строителя (независимый сторонний объект), который не понимает логику компиляции приложений и сэкономит много времени от большинства неотъемлемых проблем, таких как неправильные сборки, человеческие ошибки и т. д.

+0

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

+0

Исправление, я имел в виду один агент сборки и множественный множественный файл. Бильярдные файлы могут быть заархивированы различными способами и не будут храниться на машине агента сборки, включая SAN. Некоторые компании используют решение для файловой системы на основе svn/subversion для решения корпоративных решений для хранения двоичных файлов корпоративного уровня, некоторые компании используют nexus Pro, некоторые из нас, как мы, мы просто сохраняем последние 15 сборок UAT и продукции, а остальные мы его архивируем. –

Смежные вопросы