Потяните развертывание в среде Windows
Я ищу способ настройки развертывания по запросу, в отличие от традиционной модели принудительного развертывания в Windows.
Оптимальная ситуация будет:
- Разверните файл (ы) на главном сервере
- Дочерний сервер проверит, было ли у мастера обновление в данный момент времени или интервала времени.
- Если главный сервер содержит обновление, то он загрузит обновление и / или выполнит скрипт (что-то вроде nant?)
Решение должно быть максимально легким и работать в среде Windows.
Я посмотрел на Chef и SmartFrog, но они не подходят для этой конкретной ситуации.
Изменить: Есть несколько частей программного обеспечения, которые развертываются. Это сценарии базы данных, службы Windows и веб-сайт. У каждого ребенка будет свой уникальный скрипт, так как его требования и детали аутентификации отличаются от остальных.
Редактировать 2: Пока что люди придумали отличные ответы, но конечное решение действительно должно быть безопасным, работать внутри, и все происходит одновременно. Это связано с соответствием, отраслевыми нормами и проблемами версий (например, сервер БД не синхронизирован со службами). Конечным решением, которое я имею в виду, было бы что-то вроде сервера FPT на главном сервере и Nant, работающего на дочерних процессах для выполнения процедур установки (запуск, остановка служб, установка сценариев sql, ведение журнала установок). Это самая близкая вещь, доступная в настоящее время, но она не идеальна, так как nant работает на основе push (выполняется только тогда, когда кто-то или программа, например, cruisecontrol, запускает скрипт). Я уверен, что должно быть решение для правильного развертывания PULL для Windows. Обновление Windows и APT в Linux являются отличными примерами развертывания по запросу, если вы можете выполнить развертывание на нескольких серверах одновременно.
7 ответов
Вы говорите, что хотите выполнить развертывание программного обеспечения Windows, и все же говорите о языках сценариев сборки, таких как NAnt. Если бы это был я, я бы написал пакет установщика Windows, используя InstallShield, и воспользовался бы его службой UpdateManager, чтобы клиенты получали обновления с вашего сервера обновлений. Эти инструменты существуют и проверены в течение длительного времени и будут намного безопаснее, чем все, что вы изобретаете.
У вас работает контроллер домена? Так что вы можете "рекламировать" их? Не легче, что это. Измените эту строку, чтобы ваш путь отображал пользовательский интерфейс, но он также должен быть сценарием - как минимум в PowerShell.
"C: \ Windows \ SysWOW64 \ rundll32.exe" "C: \ Windows \ SysWOW64 \ shell32.dll", # 44 "C: \ Windows \ SysWOW64 \ CCM \ SMSRAP.cpl", запуск объявленных программ
Я использовал комбинацию круиз-контроля.net и Subversion для этого точного использования с большим успехом в прошлом.
Subversion безопасен и будет действовать как главный сервер. Круиз-контроль.net полностью поддерживает как subversion, так и nant. Конечно, это может сделать намного больше. У нас была очень сложная логика из-за отрасли, в которой мы работали, и ее требований (полезности).
Я не на 100% уверен в типе приложения, которое нужно развернуть, но если это приложение Windows Forms, которое будет распространяться среди клиентов / конечных пользователей, то вы смотрели на ClickOnce? Здесь есть режимы для автоматического опроса и снятия дельты с клиентов. Но похоже, что вы распространяете на другие серверы?
Я слышал об этой ситуации раньше, когда разговаривал с кем-то, когда был в Сент-Луисе на "вечеринке по случаю дня рождения" их веб-сайта. Интересно, это был ты?
В любом случае, я бы использовал для этого инструмент веб-развертывания (MSDeploy). MSDeploy больше похож на инструмент синхронизации, чем на что-либо еще. Концепция в том, что у вас есть источник и цель, вы хотите синхронизировать их. Если вы выполняете обычное принудительное развертывание, ваш сервер сборки будет синхронизировать выходные данные какой-либо сборки с каждым целевым сервером. Если вы хотите выполнить развертывание по запросу, просто перетащите нужные файлы в общую папку (вы называете этот главный сервер), после чего ваша клиентская машина сможет синхронизироваться с этим главным сервером.
Вот еще несколько деталей, которые вы упомянули в своем вопросе:
Развертывание файлов на главном сервере Ваш сервер сборки может использовать MSDeploy для развертывания файлов на главном сервере.
Дочерний сервер проверит, было ли у мастера обновление в данный момент времени или интервала времени. Для этого нет прямой поддержки, но здесь есть две вещи. Первое: вы можете запустить MSDeploy из скрипта (.cmd/PowerShell/MSBuild/etc), и он может определить, существует ли более новая версия. Я бы сделал это, опустив файл версии на верхний уровень вашей выходной папки. Затем, когда ваш скрипт запускается, просто прочитайте, какая версия на сервере. Если доступно более новое, запустите новое новое развертывание. Второе: MSDeploy поддерживает пошаговое развертывание, поэтому даже если вы начнете новое развертывание, оно не внесет никаких изменений. Это сложно, когда вы начинаете говорить о развертывании БД, хотя в вашем случае, вероятно, опрометчиво, я бы выбрал вариант Thing one.
Если главный сервер содержит обновление, он загрузит обновление и / или выполнит сценарий. Это то, что msdeploy.exe собирается сделать для вас.
Другие связанные предметы
- Инкрементная публикация: если ваша сеть содержит 1000 файлов, но только 5 изменены, то только 5 из них будут развернуты
- Настройка: MSDeploy поддерживает параметризацию, поэтому, когда клиент запускает синхронизацию, вы можете указать конкретные значения для этого клиента. С их помощью вы можете изменять все типы файлов, включая файлы web.conig/.xml /text text /etc. Вы даже можете предоставить пользовательские настройки IIS
- Аутентификация: вы можете использовать обычную аутентификацию Windows, если вы используете IIS 7, вы можете создавать пользователей WMSvc и использовать их.
- Безопасность: WMSvc может быть использован для этого
Это соответствует вашим потребностям?
Пару лет назад я внедрил систему, которая сделала то, что вы ищете.
Для клиентского приложения мы использовали развертывание ClickOnce, которое просто отлично работает. Для служб Windows и веб-сайтов нам пришлось внедрить собственную систему, потому что мы не могли найти ничего, что могло бы работать для нас.
Для базы данных, в которой мы пробовали репликацию (sql2005), это не сработало, так как потребовалось много времени и мощности процессора. Мы решили сделать резервную копию и восстановить данные (это было только для чтения на клиентских серверах)
В двух словах
1) Главный сервер будет содержать несколько zip-файлов с новой версией веб-сервисов, веб-сайтов и баз данных.
2) Клиентские серверы Windows Service ежедневно сканируют главный сервер (используя ftp) на наличие новых версий программного обеспечения.
3) Когда это будет найдено - удалите службу Windows и замените файлы и переустановите ее - замените файлы сайта - замените базу данных
Синхронизация Windows Live
Задумывались ли вы о синхронизации Windows Live?
Это бесплатно, и все, что вам нужно сделать, это настроить две папки. Один на вашем главном сервере и один на вашем дочернем сервере.
После настройки все файлы будут автоматически синхронизированы.
Обновление должно быть очень простым, после того, как вы обновите вашу мастер-папку, она будет автоматически реплицирована в дочерней части.
Это полностью огонь и забудь.
Я использую эту систему (одну развернутую на сервере) с шестью "дочерними" узлами, с легкостью синхронизируя 1000-дневные файлы ежедневно.
Изменить 1:
Забыл упомянуть, что файлы зашифрованы, и он использует обратное соединение, поэтому нет конфигурации маршрутизатора / брандмауэра.