Главная страница   /   22.4. Возможность развертывания на удаленных серверах при помощи Web Deploy (ASP.NET MVC 4 в действии

ASP.NET MVC 4 в действии

ASP.NET MVC 4 в действии

Джеффри Палермо

22.4. Возможность развертывания на удаленных серверах при помощи Web Deploy

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

Для сокращения необходимости регистрации на серверах один за другим требуется дополнительная технология. Вот здесь в игру вступает Web Deploy (ранее известный как MSDeploy). Вы можете загрузить его с сайта www.iis.net/expand/webdeploy. Этот инструмент предоставляет множество возможностей и функций, но самыми важными возможностями для нашего подхода к развертыванию являются следующие:

  • Способность синхронизировать файлы с HTTP
  • Способность выполнять удаленную команду

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

Обычно, для веб-приложений будет существовать сервер разработки, который размещает веб-приложение и базу данных на одной и той же машине. Среда контроля качества (QA) может быть установлена таким же образом. Затем в конвейерной и производственной средах в игру вступает большее количество серверов. Может существовать отдельный сервер базы данных, составные веб-серверы и даже сервер приложения. Автоматизация развертывания на составные машины быстро становится сложной. Чтобы уменьшить сложность, можно использовать Web Deploy для синхронизации файлов с составными машинами и выполнения скрипта развертывания на каждом сервере. Он также может быть запущен удаленно таким образом, чтобы развертывания выполнялись так же, как и в производственной среде.

Листинг 22-4: Использование Web Deploy для удаленного выполнения развертывания
msdeploy.exe -verb:sync -source:dirPath=deploymentFiles
-dest:dirPath='c:\installs',computername=192.168.1.34
msdeploy.exe -verb:sync
	-source:runCommand='c:\installs\dev.bat'
	-dest:auto,computername=192.168.1.34

Сначала вызывается msdeploy.exe с оператором sync, задающий исходную директорию на локальной машине (строка 1-2). Эта команда копирует все файлы из директории deploymentFiles (C:\installs) на удаленный сервер (в данном примере – компьютер с IP-адресом 192.168.1.34).

Затем msdeploy.exe вызывается с оператором sync, но в этот раз указан аргумент runCommand (строка 3-5). Это означает, что Web Deploy будет выполнять файл пакета по пути c:\installs\dev.bat на удаленном сервере таким же способом, как если бы вы запускали его, войдя в систему посредством удаленного рабочего стола.

Использование технологии, подобной Web Deploy, может значительно упростить сложное развертывание. Путем запуска каждой команды локально на каждом сервере скрипты будут запускаться последовательно из среды разработки через производственную среду.

Реальным преимуществом является то, что вызовы msdeploy.exe могут быть записаны в сценарий, что означает, что развертывание на составные серверы может быть полностью автоматизировано и повторяться. Написание сценария для такого вида развертывания также означает, что с единичной машины вы можете следить за развертыванием и видеть результаты каждого скрипта, консолидированного на ваш рабочий стол.

Листинг 22-5: Выходной результат команды sync файла MsDeploy.exe
Info: Using ID '0c3a97db-9ba5-4729-b306-adb1e78bb7a8' for connections to the remote server.
Info: Adding child dirPath (c:\dest\agents).
Info: Adding child dirPath (c:\dest\Database).
...
...
...
Total changes: 1045 (1045 added, 0 deleted, 0 updated, 0 parameters changed,
	69081084 bytes copied)

Предыдущий листинг демонстрирует выходной результат запуска команды sync файла MsDeploy.exe. Краткий обзор изменений покажет, сколько файлов скопировано на удаленную машину. Листинг был урезан для краткости, но в нем перечисляется каждый файл, который был скопирован из источника на конечный компьютер.

В следующем листинге 22-6 демонстрируется, как выходной результат развертывания с помощью командной строки может запускаться на удаленной машине. Параметр runCommand отправляет выходной результат удаленной команды обратно на локальную машину таким образом, чтобы его можно было зарегистрировать и просмотреть на факт наличия ошибок. Это позволяет вам автоматизировать сценарии более сложного развертывания, в котором различные уровни физического приложения могут быть с легкостью развернуты на составные машины.

Листинг 22-6: Выходной результат команды runCommand файла MsDeploy.exe
Info: Using ID '3532daf8-757a-4b7b-a541-0fed5a106c61' for connections to the remote server.
Info: Updating runCommand (c:\dest\local.bat).
Info: first ServerName DatabaseName/IIS Foldername
Info: CommonDeploy.bat
Info: .\sqlexpress codecampserver_local true
…
Info: Rebuild codecampserver_local on .\sqlexpress using scripts from
	c:\dest\Database
Info: Dropping connections for database codecampserver_local
Info: Executing: 0001_AddDatabaseUser.sql
Info: Executing: 0002_Version1Schema.sql
Info: Executing: 0003_AddConferenceIDToSpeaker.sql
Info: Executing: 0004_ChangeUserGroupHtmlToTextType.sql
Info: Executing: 0005_ChangeConferenceHtmlToTextType.sql
Info: Executing: 0006_AddHasRegistrationToConference.sql
Info: Executing: 0007_ChangeTheUserAdminJoinTable.sql
Info: Executing: 0008_AutoGeneratedMigration.sql
Info: Executing: 0009_AutoGeneratedMigration.sql
Info: Executing: 0010_AddVoteToProposal.sql
Info: Executing: 0010_AutoGeneratedMigration.sql
Info: Executing: 0011_ConferenceTimeZone.sql
Info: Executing: 0012_ConferenceURL.sql
Info: Executing: 0013_AutoGeneratedMigration.sql
Info: Executing: 0013_Event.sql
Info: Executing: 0014_MigrateConferenceData.sql
Info: Executing: 0015_ExtendMeetingStringLengths.sql
Info: Executing: 0016_ExtendMeetingStringLengthsSomeMore.sql
Info: Executing: 0017_EventDescriptionChangeLengthTo500.sql
Info: Executing: 0018_MakeSponsorAOneToMany.sql
Info: Executing: 0019_MigrateTheTables.sql
Info: Executing: 0020_ChangeAuditInfo.sql
Info: Executing: 0021_AddKeys.sql
Info: Executing: 0022_MakeSponsorIdInt32.sql
Info: Executing: 0023_AddHeartbeat.sql
Info: Executing: 0024_ModifyHeartbeat.sql
Info: [echo] Current Database Version: 26
Info: [echo] STEP 1 - Configuring CodeCampServer...
Info: [xmlpoke] Found '1' nodes matching XPath expression '//*/
	hbm:property[@name='connection.connection_string']'.
Info: [echo] STEP 5 - Removing Existing CodeCampServer Application
	Files...
Info: [delete] Deleting directory 'C:\inetpub\codecampserver_local'.
Info: [echo] STEP 6 - Deploying CodeCampServer Application Files...
Info: [copy] Copying 434 files to 'C:\inetpub\codecampserver_local'.
Info: loadDevData:
Info: [xmlpoke] Found '1' nodes matching XPath expression '//*/
	hbm:property[@name='connection.connection_string']'.
Info: [xmlpoke] Found '1' nodes matching XPath expression '//*/
	hbm:property[@name='connection.connection_string']'.
Info: [nunit2] Tests run: 1, Failures: 0, Not run: 0, Time: 4.522 seconds
Info: [nunit2]
Info: [echo] Deploy job agent...
Info: [copy] Copying 57 files to
	'C:\inetpub\codecampserver_local_BatchAgents'.
Info: BUILD SUCCEEDED
Total time: 8.6 seconds.
Warning: The process 'C:\Windows\system32\cmd.exe' (command line '/c
	"C:\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp\i4acaknx.ftl.bat"')
	exited with code '0x0'.
Total changes: 1 (0 added, 0 deleted, 1 updated, 0 parameters changed, 0 bytes copied)