Похоже, существует так много разных способов автоматизации сборки / развертывания, что становится трудно проанализировать все различные сценарии, которые люди поддерживают в учебных пособиях в Интернете. Поэтому я хотел задать вопрос участникам stackoverflow ... как лучше всего настроить автоматизированную систему сборки и развертывания, используя следующую конфигурацию:
Одна из первых вещей, которые я попробовал, - это настроить CCnet на автоматическое архивирование выходных данных и их копирование на сервер, но тогда для распаковки в месте назначения потребуется ручная работа. Однако, если мы попытаемся скопировать все файлы по отдельности, это может занять много времени, если это большое приложение (сервер сборки находится за пределами центра обработки данных в нашем офисе ... я знаю).
Также особый интерес представляет то, как мы будем поддерживать несколько сред, таких как dev, qa, uat и, конечно же, prod.
MSDeploy кажется действительно интересным, но, если я неправильно интерпретирую литературу, не помогает в сценарии развертывания из вывода сервера сборки. Во всяком случае, похоже, что это будет полезно при развертывании одной сборки в ферме сборки ... но даже для развертывания из одной среды в другую придется вручную изменять параметры конфигурации, URL-адреса веб-служб и т. д.





У меня был связанный вопрос о получении развертываемого набора файлов из автоматической сборки. Я обнаружил, что проекты веб-развертывания (ссылки и все в старом вопросе) сделали то, что мне нужно - это надстройка VS и MSBuild.
У вас есть возможность запускать команды удаленно? Утилита PsExec из Systinternals позволит запустить программу распаковки из командной строки на удаленном компьютере. Если у вас есть сценарий, который копирует сборку в виде файла .zip на удаленный сайт, вам просто понадобится еще одна строка для вызова PsExec, чтобы распаковать файлы.
Недавно я потратил несколько дней на автоматизацию развертывания в своей компании.
Мы используем комбинацию CruiseControl, NAnt, MSBuild для создания окончательной версии приложения. Затем отдельный сценарий использует MSDeploy и XCopy для резервного копирования действующего сайта и передачи новых файлов.
Наше решение кратко описано в ответе на этот вопрос Автоматизировать развертывание веб-приложений?
Есть еще один новый инструмент сборки (очень умная оболочка) под названием NUBuild. Его легкий вес, открытый исходный код, чрезвычайно простой в настройке и практически не требующий обслуживания. Мне очень нравится этот новый инструмент, и мы сделали его стандартным инструментом для непрерывного процесса сборки и интеграции наших проектов (у нас около 400 проектов от 75 разработчиков). Попробуйте сами.
Это обычная проблема (и я хотел бы прочитать ее раньше) для всех разработчиков, а не только для ASP.NET. Моя команда, как один из его разработчиков, естественно, использует BuildMaster для внутреннего использования для всего процесса выпуска, и для большинства сценариев это бесплатно. В этом инструменте мы можем выполнять все стандартные сборки CI для создания артефактов, а затем настраивать процесс автоматизации для развертывания этих артефактов на любом из 40+ серверов, размещенных внутри или снаружи, в зависимости от конкретного приложения или среды. .
Поскольку вы специально упомянули развертывание в различных средах тестирования, это фундаментальный аспект инструмента. Идея состоит в том, чтобы смоделировать рабочий процесс среды (например, Интеграция -> Контроль качества -> Производство), который у вас уже есть, и по существу продвигать сборку на всем пути от управления версиями до производства. В большинстве случаев это так же просто, как добавить действие развертывания, которое развертывает артефакт в среде, в других случаях это может быть намного сложнее.
Вы также случайно упомянули, что изменения файла конфигурации являются частью развертывания, которое является еще одним встроенным компонентом BuildMaster. У нас была идея использовать сам инструмент в качестве центрального концентратора для всех файлов конфигурации и развертываний, чтобы гарантировать автоматическое применение последних изменений с помощью простого действия «развертывание файлов конфигурации» в вашем плане развертывания.
Одна вещь, которую вы не упомянули в отношении этого процесса, - это аспект развертывания базы данных. Большинству приложений ASP.NET требуется связанная база данных, иначе они могут быть просто статическими HTML-файлами. Очень важно, чтобы схема базы данных обновлялась до соответствующей версии базы данных при каждом развертывании. Неудивительно, что в BuildMaster есть модуль, который также выполняет это за вас. Идея состоит в том, чтобы хранить сценарии DDL-DML в самом инструменте, и, выполняя сценарии только однажды для каждой среды, он обеспечивает актуальность всех ваших баз данных в каждой среде по мере развертывания ваших сборок через них. Другие сценарии (например, хранимые процедуры, представления, триггеры и т. д.) По сути являются файлами кода и, следовательно, принадлежат системе контроля версий. Эти сценарии типа DROP-CREATE-CONFIGURE можно запускать каждый раз в большинстве случаев с помощью простого действия развертывания.
Еще одна часть головоломки развертывания, о которой не задумывается большинство разработчиков, - это автоматизация процессов. Многим разработчикам необходимо выполнить подписку или заполнить формы запроса на изменение, чтобы выполнить эти процессы вручную. Опять же, все это доступно как часть автоматической настройки рабочего процесса в BuildMaster. Вы можете настроить блокировщики, которые не разрешают продвижение, чтобы указать среду QA, если все модульные тесты не пройдены, или заблокировать продвижение в промежуточную среду, если кто-то из группы QA не одобрит сборку и все проблемы в вашем инструменте отслеживания проблем не будут решены / закрыты для этот конкретный выпуск.
Хотя я понимаю, что я пропустил CC.NET в ответе, все наши приложения создаются и развертываются с помощью BuildMaster, поэтому он нам больше не нужен, хотя мы могли бы так же легко забрать артефакты из места перетаскивания и развернуть их в более поздних средах.
Я вижу, что многие люди используют CC для своих .NET-проектов, но почему бы не использовать Jenkins, Sonarqube? У них есть все, что вам нужно. Настроил все это за 3 дня. У меня есть сервер Win 2008 R2, MSSQL, Jenkins, VIsual SVN и Sonarqube.
Все это отлично работает, и вы получаете все показатели по вашему проекту. Sonarqube использует Gallio, Gendarme, FXcop, Stylecop, NDepths и PartCover для получения ваших показателей, и все это довольно просто, поскольку SonarQube делает это автоматически без особой настройки.
Я выкладываю фотографии для тебя, тоже чувствую это. Вот ведьма Jenkins, которая собирает и получает метрики сонара, а также еще одно задание для автоматического развертывания в IIS.

И Sonarqube, все показатели для моего проекта. Это простое приложение MVC4, но оно отлично работает !:

Если вам нужна дополнительная информация, я могу быть более конкретным, но я думаю, вам стоит хотя бы подумать о Дженкинсе. Если CC вам больше подходит, по крайней мере, вы посмотрели на хорошую альтернативу, прежде чем выбрать.
Вся эта установка использует MSBuild, а также создает и развертывает приложения.
Хм, хотя это кажется очень крутым ... похоже, это не помогает сценарию автоматической сборки (если я не читаю документацию неправильно).