Как можно достичь .NET Deployment Nirvana? - PullRequest
5 голосов
/ 15 июня 2009

Наша компания приближается к дате начала работы (и к получению даты отдела контроля качества), и я пытаюсь определить правильные операционные процессы для поддержки этого. Мое большое соображение - как избежать ада развертывания / конфигурации, который неизбежно произошел. Кто-нибудь из вас нашел хорошее решение для передачи сборок непрограммистам, чтобы они могли успешно установить и настроить его в QA, промежуточной и производственной среде?

Полная среда для нас состоит из смеси разнородных запланированных задач, служб Windows и веб-сайтов, которые можно масштабировать с помощью параллельного развертывания. К счастью, средства конфигурации последовательны. К сожалению, все это управляется с помощью файлов .NET web / app.config. По моему опыту, сотрудники QA и ops всегда портятся, пытаясь их изменить (XML удивительно сложно обрабатывать большинству людей!)

Вот варианты, которые я рассматриваю:

Использование файлов machine.config

Это то, чего я не делал на практике, но выглядит многообещающе. Если мы создадим шаблон machine.config, содержащий каждый параметр для каждого приложения, которое может варьироваться в зависимости от среды, это позволит администратору вносить все изменения в один файл и развертывать его на каждом компьютере в среде.

Плюсы:
Это потенциально уменьшает количество шагов, необходимых для развертывания системы
Минусы:
Необходимость каким-либо образом документировать изменения схемы конфигурации
Unknowns:
Мы используем пользовательские разделы конфигурации и другие расширения конфигурации, которые ссылаются на сборки. Требуется ли для этого установка наших сборок .NET в GAC компьютеров?

Выполнение манипуляций с конфигурационным файлом в процессе сборки

Если мы настроим QA, промежуточную и производственную среды так, чтобы они выглядели идентично нашему программному обеспечению (виртуальные серверы и локальные сети и т. Д.), QA должен иметь возможность переносить готовое программное обеспечение без изменений конфигурации непосредственно в промежуточную среду, и подготовка к производству. С этой настройкой теоретически мы могли бы передать предварительно сконфигурированные файлы QA foo.config, которые никто не должен трогать.

Плюсы:
Инжиниринг будет более опытным в обеспечении правильности файлов конфигурации
Минусы:
Для инженеров может считаться плохой практикой безопасности знать о производственных конфигурациях (плохой аргумент, ИМХО)

иметь централизованное сетевое хранилище настроек

Этот не выглядит привлекательным для меня, потому что я пробовал это тремя способами, которые в конечном итоге были неудачными:

  1. В предыдущей компании у нас были параметры конфигурации в базе данных, но, конечно, вы не можете поместить их все туда, так как вам нужно настроить строку подключения от до этой базы данных. Кроме того, было так же сложно убедиться, что база данных была должным образом обновлена ​​перед развертыванием.
  2. Другим подходом, который мы попробовали, было создание сетевого сервиса, который работал бы как своего рода централизованный реестр. Это почти сработало, но всегда были проблемы с локальным кэшированием, гарантией того, что URL-адрес сервера конфигурации был правильно настроен, и, конечно, настройкой сервера конфигурации.
  3. Active Directory? Еа! Должен ли я сказать больше?

Мысли

Насколько успешно вы пользовались вариантами, которые я рассматриваю? Есть ли альтернативы этим, которые хорошо сработали для вас?

Ответы [ 5 ]

3 голосов
/ 15 июня 2009

Я бы сказал, сделать пару вещей:

Сначала используйте промежуточный сервер. Независимо от того, используется ли проект для инженеров или не инженеров, имейте место, где вы выполняете «фиктивные развертывания» своего кода на сервере, и где он тестируется оттуда. Это служит хорошей цели - дать отдельную «производственную» среду для тестирования, и это позволяет проводить обучение развертыванию, не заставляя всех впадать в уныние и шаткость из-за боязни взломать все при развертывании. Это стоит немного дороже с точки зрения аппаратного обеспечения, но, вероятно, оно того стоит из-за ошибок, которые он предотвращает.

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

2 голосов
/ 15 июня 2009

У нас есть пользовательский исполняемый файл, который запускается после сборок, которые мы используем.

В наших проектах 4 конфигурационных файла

web.config - разработка (локальная коробка)
web.integration.config - альфа-тестирование (выполняется на нашем альфа-сервере)
web.staging.config - бета-тестирование (запускается на нашем бета-сервере)
web.production.config - production (работает на нашем производственном сервере)

exe просто удаляет все файлы, за исключением необходимого, а затем переименовывает его в web.config ...

Мы не разрешаем сторонним разработчикам (QA, DBA и т. Д.) Манипулировать файлами конфигурации, поскольку они могут изменить производственные значения (почтовый сервер, сервер SQL) и вызвать серьезные проблемы ...

Это очень хорошо работает для нас

1 голос
/ 15 июня 2009

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

0 голосов
/ 15 июня 2009

Предыдущая компания, мы реализовали это:

  • Разработчики создают главные конфигурационные файлы для каждого приложения
  • Определите токены, относящиеся к машине / среде, и перенесите их в отдельный файл
  • Машина CI выполняет проверку, помечает файлы новым номером версии, запускает тесты, а затем копирует приложение в центральный общий ресурс, которым управляют люди управления изменениями.
  • Управление изменениями поднимает нашу элегантную панель развертывания. Затем они выбирают нужное приложение, запрашиваемую версию и запрашиваемую среду. Затем они нажимают кнопку «Перейти».
  • Приложение развертывания Robocopies все файлы из поэтапного общего файлового ресурса на сервер.
  • Затем приложение развертывания запускает все дальнейшие задачи в сценарии сборки.
  • Сценарий NAnt был скопирован на каждую целевую машину, а затем запущен с помощью P / Invoke

Все было реализовано с использованием Anthill, NAnt, Robocopy и легкого пользовательского приложения, которое организовывало развертывания. Использование

Самый большой плюс в том, что у нас почти никогда не было шага ручного развертывания. Все было повторяемым и проверяемым начиная с развертывания dev.

С этой целью мы старались изолировать как можно больше. Мы в значительной степени избегали GAC и machine.configs. Со временем мы обнаружили, что это очень помогло со скоростью, так как все приложения не всегда хотели переходить на новые версии общих компонентов.

0 голосов
/ 15 июня 2009

У меня всегда был успех с сочетанием локальных и баз данных хранилищ настроек. Специфичные для машины настройки были сохранены в файле XML на машине (это включало информацию о соединении для нашей корневой базы данных), как и любые специфичные для приложения (но не специфичные для пользователя) настройки. В базе данных хранились все пользовательские или общеорганизационные настройки, включая информацию о соединении для ДРУГИХ баз данных. Другими словами, у нас была одна база данных с этой информацией, которую клиент мог затем использовать для подключения к другим базам данных. Это позволило нам централизованно поддерживать все, кроме подключения к нашей корневой базе данных.

...