2/24/2011 11:17:05 AM

Решили мы навести порядок с развёртыванием приложений на серверах. Точнее, решили-то давно, а вот, что называется, “руки доходить” начали только сейчас.

Основные тезисы:

  • Иметь в проекте несколько вариантов конфигурационных файлов, использующихся в разных окружениях (Local, UAT, Test, Staging, Production, etc) – неправильно, сложно и некрасиво. Сюда же как вариант относятся файлы трансформации, поддерживаемые VS2010 (*.Staging.Config, *.Prod.Config, *.UAT.config, etc).
    В идеале хотелось бы иметь один конфигурационный файл с максимум одной трансформацией для debug и release компиляци. Release-компиляция для всех окружений должна быть одинаковой.
  • Иметь где-то в проекте/почте/голове/на стене список, по которому развёртывается приложение – неправильно.
    Я имею в виду списки вида:
    1. Остановить сервисы такие-то;
    2. Обновить базу данных так-то;
    3. Скопировать в каталог веб-сайта то-то;
    4. Изменить/проверить конфигурацию и connection strings;
    5. Прочая байда…
  • Выполнять этот список наполовину вручную – неправильно Winking smile
  • Прописывать имена и пароли к базе данных и прочие значимые вещи в конфигурационные файлы и хранить их в lдоступном каждому source control – неправильно;
  • Ситуация, при которой разработчики имеют доступ/пароли к production environment – неправильная;
  • Если в случае формирования нового окружения, или в случае добавления каких-то серверов/компьютеров приходится делать долгое и утомительное конфигурирование новых машин перед тем, как установить на них приложение – это неправильно;

Хочется сделать более-менее правильно и удобно, поэтому остановились на использовании MSDeploy, который позволяет делать следующее:

  • Создавать самодостаточный инсталляционный пакет (в конечном итоге это zip-файл), либо набор таких пакетов;
  • Изменяющиеся от окружения к окружению параметры могут быть переданы при развёртывания пакета как параметры;
  • Операторам, выполняющим развёртывание, не нужно “знать лишнего”, достаточно лишь знать на какую машину послать какой пакет (в случае, если их несколько), либо с какими параметрами устанавливать пакет на какой машине (в случае, когда всё упаковано в одном пакете), для чего они легко и привычно сделают скрипт, который смогут запускать одним нажатием клавиши;
  • Пароли от “настоящего” production environment никогда не попадут в source control, доступный разработчикам. IT-ребята могут, как они и любят, хранить файлики с параметрами в своих закромах, недоступных неверным;
  • MSDeploy позволяет автоматическое развёртывание пакетов без необходимости заходить и копировать что-то по FTP/SSH/RDP, включая опции типа “сделай везде как вот здесь” и т.д.;
  • Cоздание пакета MSDeploy может быть полностью автоматизировано, например, как часть билд-процесса;
  • Грамотно созданному пакету практически всё равно, устанавливаться ли “с нуля” на “чистую” машину, либо обновлять уже существующую версию, после развёртывания получаем работоспособную машину;
  • Уже созданные пакеты легко хранить, в любой момент можно найти и установить текущую, либо любую из предыдущих версий;

Вкратце, развёртывание должно быть простым и безболезненным, не должно требовать дополнительной подготовки и должно сводиться к “нажатию большой зелёной кнопки” техническим оператором, мы в любой момент готовы к развёртыванию.

На вопрос “что” мы уже ответили – MSDeploy.
Возможно я ещё напишу немного ответов на вопрос “как” (документация по MSDeploy отчего-то крайне невнятная и убогая).

Comments are closed

Powered by BlogEngine.NET 2.5.0.6

About the author

Alexey Raga Alexey Raga
.NET software developer.

E-mail me Send mail

Twitter

Widget Twitter not found.

Root element is missing.X


Recent posts

Archive

Disclaimer

The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

© Copyright 2012

Sign in