Как достичь нирваны развертывания .NET?

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

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

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

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

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

Pros:
This potentially reduces the number of steps necessary to deploy a system
Cons:
Having to somehow document configuration schema changes
Unknowns:
We make use of custom config sections and other configuration extensions that reference assemblies. Would this require us to install our .NET assemblies in the machines' GACs?

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

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

Pros:
Engineering would be more adept at ensuring that configuration files are valid
Cons:
It may be considered poor security practice for engineering to be aware of production configurations (a poor argument, IMHO)

Иметь централизованный сетевой репозиторий настроек

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

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

Мысли?

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


person Jacob    schedule 15.06.2009    source источник
comment
Всем спасибо за ваш вклад. Похоже, что мой второй вариант - лучший выбор, когда инженеры создают файлы конфигурации, которые передаются, и развертывают сборки на виртуальных машинах.   -  person Jacob    schedule 16.06.2009


Ответы (5)


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

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

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

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

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

У нас это работает очень хорошо

person bytebender    schedule 15.06.2009

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

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

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

person Paul Sonier    schedule 15.06.2009

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

person George Stocker    schedule 15.06.2009

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

person Adam Robinson    schedule 15.06.2009

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

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

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

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

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

person Community    schedule 15.06.2009