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

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

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

Управление настройками среды

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

С NAnt управление этими конфигурациями среды является довольно простым. Развертывание начинается при помощи файла пакета, который всего навсего запускает NAnt. Zip-файл пакета развертывания содержит следующее:

  • NAnt
  • website
  • database
  • deployment.build
  • Dev.bat
  • CommonDeploy.bat

Папка NAnt содержит всю среду выполнения дистрибутива NAnt. Мы включаем дистрибутив, чтобы избежать шага установки среды на каждый сервер, на который мы будем выполнять развертывание. Папка website содержит окончательное приложение, которое мы развернули с помощью XCOPY в корректную папку на сервере. Deployment.build – это NAnt build-скрипт, который содержит окончательный скрипт развертывания. Файл Dev.bat – файл самозагрузки, который вызывает CommonDeploy.bat.

В листинге 22-1 файл самозагрузки Dev.bat переопределяет директорию развертывания и свойства строки соединения путем задания переменных среды, а затем вызовов скрипта CommonDeploy.bat. Заполните метки-заполнители в TODO, когда будете реализовывать скрипт для себя.

Листинг 22-1: Задание конфигурации среды в Dev.bat
SET driverClass=NHibernate.Driver.SqlClientDriver
SET connectionString=Data Source=.\sqlexpress;Initial
	Catalog=TODO;uid=sa;pwd=TODO
SET localConnectionString=Data Source=.\sqlexpress;Initial
	Catalog=TODO;uid=sa;pwd=TODO
SET dialect=NHibernate.Dialect.MsSql2005Dialect
SET websiteTargetDir=\TODO
SET databaseServer=TODO\sqlexpress
SET databaseName=TODO
SET databaseIntegrated=false
SET databaseUsername=sa
SET databasePassword=TODO
SET shouldReloadDatabase=true
CommonDeploy.bat

Строка 13: Объявляет переменные

В файле Dev.bat мы устанавливаем переменные среды в качестве значений конфигурации среды (некоторые из которых все еще должны быть заполненными). С помощью одного файла пакета CommonDeploy.bat, который декламирует переменные среды, мы можем создать дополнительные файлы пакета самозагрузки для каждой конечной среды. Завершающая часть скрипта пакета Dev.bat вызывает скрипт CommonDeploy.bat (продемонстрированный в следующем листинге), который предоставляет универсальный файл самозагрузки поверх NAnt.

Листинг 22-2: Файл самозагрузки CommonDeploy.bat, который переопределяет свойства NAnt
nant\nant.exe
-buildfile:deployment.build
-D:should.reload.database="%shouldReloadDatabase%"
-D:driver.class="%driverClass%"
-D:connection.string="%connectionString%"
-D:local.connection.string="%localConnectionString%"
-D:dialect="%dialect%"
-D:website.target.dir="%websiteTargetDir%"
-D:database.server="%databaseServer%"
-D:database.name="%databaseName%"
-D:database.integrated="%databaseIntegrated%"
-D:database.username="%databaseUsername%"
-D:database.password="%databasePassword%"
-D:test.database.name="%testDatabaseName%"
-D:excel.server.path="%excelServerPath%"

Строка 3: Использует заранее заданные переменные среды

Директива в этом листинге находится в файле CommonDeploy.bat, и он вызывает NAnt посредством использования переменных среды, установленных при помощи предыдущего файла пакета конкретной среды (в нашем случае Dev.bat). Операторы выбора –D командной строки для NAnt дают нам возможность переопределить свойства корректными разворачиваемыми значениями.

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

Листинг 22-3: NAnt скрипт deployment.build с конечным объектом развертывания
<target name="deploy">
	<call target="rebuildDatabase"
			if="${should.reload.database}" />
	<xmlpoke
			file="website/bin/hibernate.cfg.xml"
			xpath="${connection.string.path}"
			value="${local.connection.string}">
		<namespaces>
			<namespace prefix="hbm"
					uri="urn:nhibernate-configuration-2.2"></namespace>
		</namespaces>
	</xmlpoke>
	<copy todir="${website.target.dir}" overwrite="true"
			includeemptydirs="true" >
		<fileset basedir="website">
			<include name="**" />
		</fileset>
	</copy>
</target>

Строка 2-3: Вызывает другой конечный объект

Строка 4: Изменяет строку соединения

Строка 14: Копирует все файлы веб-сайта

Первые строки, отмеченные в этом NAnt скрипте, – это значения XML атрибутов в формате ${some.value.here}. Это свойства NAnt, чьи значения были определены ранее в рамках вашего файла самозагрузки. При выполнении файла CommonDeploy.bat операторы выбора командной строки устанавливают в качестве значений этих свойств подходящие настройки среды. Наконец, конечный объект deploy выполняет реальное развертывание. Конечный объект NAnt – это именованная группа задач, схожая с методом в C#.

или RSS канал: Что новенького на smarly.net