2011-01-27 2 views
1

Я использую NAnt для создания проекта ASP.NET MVC.Упаковка с NAnt, как обращаться с различными средами

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

Сценарий развертывания создает резервную копию текущего веб-сайта, настраивает новую версию веб-сайта и обновляет базу данных.

Это прекрасно подходит для единой среды.

Однако мы все больше и больше спрашиваем о создании среды постановки/приема рядом с продукцией. Разумеется, эти среды различаются по структуре файлов, серверу БД, настройкам конфигурации и т. Д.

Как лучше всего справиться с этим в сценариях развертывания? Я не хочу создавать отдельные переменные для каждой среды, различимые только по имени.

Предоставление значений по умолчанию и предоставление переменных в отдельных файлах представляется более логичным.

У кого-нибудь есть практический опыт?

ответ

1

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

Visual Studio может сделать тяжелый подъем здесь, если хотите; вы можете создавать настройки и указывать значения по умолчанию на вкладке «Параметры» свойств проекта Visual Studio.

Это создаст файл конфигурации для вас и обеспечит строго типизированный доступ через Properties.Settings.Default.

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

Я не рекомендую ни один из этих подходов, потому что:

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

Я создаю копию каждого конфигурационного файла (например, web.config.example) и закомментирую настройки внутри них (если у них нет значимых значений по умолчанию). Я проверяю их и у них развернуты вместо реального web.config (т. Е. Web.config НЕ развернут автоматически. Web.config.example развернут как web.config.example.

Администратор новой среды должен будет скопировать и переименовать файл в web.config и предоставить содержательные значения). Я также поместил все вызовы в настройки моего собственного класса-обертки - если обязательная настройка отсутствует, я выдаю исключение.

Сборка и мои среды больше не зависят друг от друга - одна сборка может быть развернута в любой среде.

Если параметр отсутствует (новая среда или новая настройка в существующей среде), вы получаете хорошее четкое исключение, поднятое, чтобы сообщить администратору, что делать.

Существующие настройки не изменяются после обновления, поскольку обновлены только файлы .example. Задача администратора - сравнить текущие настройки с последним примером и при необходимости пересмотреть.

Чтобы настроить развертывание, вы можете поместить все настройки среды (пути установки и т. Д.) В свойства nant и переместить их в отдельный файл (например, settings.build), затем использовать задачу nant include, чтобы включить этот файл в в верхней части вашего файла развертывания (например, deploy.build). Затем вы можете развернуть новую версию deploy.build, не перезаписывая свои изменения в конфигурации, поскольку они находятся в settings.build. Если новое свойство введено в deploy.build nant, сбойное сообщение будет сообщено вам, что вы не установили это свойство.

+0

Привет, спасибо за ответ. Это уже большой кусок того, что мы уже делаем, довольно похоже. Но я действительно хочу знать, как обрабатывать различия в развертывании среды. Так, например: резервное копирование старого приложения перед установкой более новой версии веб-приложения. – Bertvan

+0

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

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