Должен быть лучший способ, чем просто «Публикация» в Visual Studio и необходимость вручную передавать файлы FTP, которые были изменены?
Бритва Оккама обычно является предпочтительным подходом: чем проще, тем лучше. FTP легко с небольшими или без осложнений. Некоторые люди используют XCOPY, Filezilla или WSFTP, другие могут использовать MS Web Deployment Tool (с которым я еще не знаком), но в целом есть лучший способ развертывания веб-приложений ASP.NET (и других приложения в общем). ИМО, если развертывание учитывается с самого начала разработки, развертывание можно интегрировать с веб-приложением, что обеспечивает относительно безболезненное и плавное развертывание в будущем.
Будучи разработчиком .NET, который работал в нескольких компаниях, разрабатывающих веб-приложения ASP.NET разных размеров, сложности и количества пользователей (от нескольких сотен пользователей до десятков тысяч), «развертывание» IMO часто является наиболее «плавной» темой. Некоторые организации слишком далеко зашли с точки зрения бюрократии, в то время как другие вообще не решают никаких проблем с развертыванием. По моему опыту, проблемы с развертыванием имеют тенденцию делиться на 1 или более из 3 категорий с точки зрения трудностей / неудач:
Развертывание игнорируется / забывается подробно на этапе проектирования:
большинство веб-приложений, как правило, включают веб-сервер и базу данных. Помимо кода приложения, может быть, некоторых хранимых процедур и таблиц базы данных, развертывание не требует особых размышлений. ASP.NET более чем способна помочь в развертывании, но чаще всего разработчики отвлекаются с точки зрения запуска реального приложения и выполнения его задачи, оставляя способ развертывания как отдельную проблему.
Развертывание является сложным в нескольких системах и в игре людей:
сложность это сука. От MSMQ, хранимых процедур и триггеров T-SQL, служб Reporting Services, обмена сообщениями SOAP / XML, аутентификации AD, SSAS / SSIS и т. Д. И т. Д. Количество используемых технологий увеличивает количество вовлеченных людей. Хуже всего то, что все эти разные компоненты, как правило, управляются разными объектами внутри организации. Если все не синхронизируются друг с другом, развертывание может усложниться быстро, что приведет к множеству точек отказа.
Лень, апатия или отсутствие общения и / или управления:
от небольшого количества документов до отсутствия или отсутствия скоординированного общения и протоколов, можно легко запутать относительно простой процесс. Развертывание должно быть простой процедурой с многочисленными проверками, постоянно документирующими то, что сделано, но часто это не так. Большинство людей просто хотят, чтобы этот чертов сайт заработал. По моему опыту, людям (не программистам) все равно, пока что-то не пойдет по- настоящему . Ответственность за развертывание редко ложится на одного человека , поскольку никто не хочет быть причиной неудачи, поэтому ответственность обычно рассеивается.
Существует так много непростых файловых исключений, что я бы предпочел максимально автоматизировать процесс, чтобы предотвратить случайные загрузки. Так как ваша команда это делает?
Я не знаю ни одного поставщика для автоматизации развертывания, хотя я бы не удивился, если бы их было несколько. Возможно, вы могли бы написать сценарий решения через VBScript / WMI или пакетный сценарий решения, но реальность такова, что вам нужно адаптировать решение вместе для более сложных сайтов ASP.NET. Простые сайты, состоящие из страниц, подключения к базе данных и ничего более, вам не нужно делать почти столько же, так что масштабируйте свои усилия по развертыванию в соответствии со сложностью самого приложения.
Пока что в моей текущей работе развертывание все еще выполняется по FTP и перемещению нескольких файлов. Это безобразно, легко облажаться и нет смысла в точной истории. Конечно, вы можете просматривать журналы FTP, никто не мешает это сделать. Наши приложения довольно просты без особой необходимости, кроме FTP. То, как моя команда развертывает наши веб-приложения, для вас мало что дает. Вместо этого я предпочел бы использовать эту возможность, чтобы предложить лучшие практики.
- Ничего не предполагать Учетные записи пользователей, права R / W / X, списки ACL, брандмауэры, время (когда развертывать и сколько времени у вас есть на это), и, если возможно, тестировать развертывание во всех средах до окончательной «даты запуска».
- Прежде чем начнется разработка, необходимо внедрить фактор в разработку. Если это простой сайт, пусть будет так. Если имеется множество движущихся частей, учтите все это и фактически создайте план, в котором все компоненты (код, база данных, отчеты, очереди и т. Д.) Находятся в одном плане.
- Координировать с другими паритетами и общаться эффективно и действенно.
- Документируйте как можно больше соответствующей информации, если это возможно.
- Среда: один веб-сервер против веб-фермы; 32-разрядный или 64-разрядный; найти способ мониторинга логов / ошибок / поворота и т. д.
- Найдите (или создайте) инструменты, которые могут помочь в развертывании.
- Если возможно для программируемого развертывания, выберите парадигму и придерживайтесь ее. Например, если вы хотите использовать сервер базы данных в качестве основного средства для выполнения состояния приложения, развертывания, доступа и т. Д., Запустите его в приложение и придерживайтесь его. Если вы предпочитаете читать файлы XML (например, web.config) всеми средствами, просто придерживайтесь последовательной парадигмы развертывания приложения. Другой пример: некоторые организации оставляют файл web.config в виде статического файла в каждой среде, который не следует развертывать в других средах. Другая программа web.config таким образом, что она может быть развернута в разных средах без ошибок.
Я понимаю, что этот пост может быть излишним для вопроса, который был первоначально задан. К сожалению, развертывание просто не простая вещь, поскольку приложения могут различаться по сложности. Могу поспорить, что большинство организаций, которые развертывают сложные приложения ASP.NET, со временем разработали определенные стратегии для работы (по крайней мере) надежно.