Настройка среды сборки - Использование .net, java, hudson и ruby ​​- Может действительно использовать критику

Я пытаюсь найти лучший способ сшить быстрый, повторяемый, нерушимый процесс сборки для следующей среды. У меня есть план, как это сделать, но я бы очень признателен за критику. (Я бы также оценил некоторый пример кода, но об этом позже)

Экосистема - логическая:

  • Веб-сайт - asp.net MVC 2,.net 3.5, Visual Studio 2010. IIS 6, приложение Facebook iframe выражение. Это приложение для веб-сайта/facebook использует несколько сервисов. Внутренний поиск api, внутренний api файл api, facebook и IP-геолокация. Подробнее об этом ниже
  • Внутренний поиск api -.net, restful, построенный с использованием старых школьных обработчиков .ashx. Api использует lucene и базу данных sql-сервера за кулисами. Мой проект не коснется кода lucene, но потенциально коснется базы данных и веб-сервисов.
  • внутреннее чтение/запись api - java, успокаивающее, работающее на Tomcat
  • Веб-службы Facebook.
  • Смеющийся сайт, который эмулирует внутреннее чтение/запись api и части facebook api
  • Хадсон - запускает единичные тесты на checkin и создает некоторые инсталляторы, которые ведут себя непоследовательно.

Экосистема - физическая:

Все эти машины могут разговаривать друг с другом, кроме Хадсона. Хадсон не видит ни одного из целевых машин. Поэтому код нужно вытаскивать, а не толкать. (Безопасность вещь)  1. Веб-сервер. Удерживает веб-сайт и читает/пишет api. (Сама api записывает в реплицированную среду sql-сервера).
 2. Поисковый сервер - Дома поиска api.
 3. Hudson Server - не имеет разрешений для нажатия в любую среду. Им нужно тянуть.  4. Lucene Server  5. Сервер базы данных

Проблема

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

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

Цели

  • Fast - я хочу отказаться от этого с 20-минутного упражнения, когда все будет хорошо, до 3-минутного.
  • Глупо просто: я хочу рассказать среде, что делать с максимально возможными командами, и не нужно помнить, как сшить среды вместе.
  • Повторяется - я хочу, чтобы script был идемпотентным. Вид следствия для Глупостей Простая вещь.

План до сих пор

Вот что я придумал до сих пор и о том, что я искал для обратной связи:

  • Использовать новые преобразования web.config в VisualStudio, чтобы легко изменять конфигурации на основе envrionment. Однако этого решения недостаточно. Я оставлю web.config настроенным, чтобы сайт работал локально, но при развертывании в другом месте у меня есть до 6 различных возможных выходов только для среды стресса (из-за издевательств различных зависимостей), не говоря уже о настройках для prod, QA и dev. Затем каждый из них потребует собственной настройки или установки, которая затем будет обрабатывать конфигурации. Поэтому я сейчас склоняюсь к тому, чтобы иметь только версию dev, а также версию, которая преобразует ключевые значения конфигурации в синтаксис интерполяции строк Ruby. ({#VAR_NAME} вид вещей)
  • Создайте ruby ​​ script для каждого сервера, который по сути является начальной загрузкой script. То есть, он ничего не будет делать, кроме загрузки кода ruby, который выполняет "настоящую" работу из hudson/subversion, так что функциональность script может развиваться вместе с приложением, что упрощает создание сайта в любой момент время по ссылке на соответствующую версию script. Итак, в этом случае script загружает другой script и запускает его.
  • "real" ruby ​​ script затем примет параметры командной строки, которые описывают, как должна выглядеть среда. Оттуда можно использовать один файл конфигурации, и ruby ​​будет загружать текущие инсталляторы, запускать их, обрабатывать конфигурации, перезапускать IIS/Tomcat и запускать любой код настройки данных, который необходим.

Так что это. Я нахожусь в кризисе в реальном времени, чтобы получить этот стресс-тест, поэтому любые отзывы, которые, по вашему мнению, могут сократить время, которое может потребоваться, будут оценены. Это включает в себя бесстыдный запрос для образца рубинового кода. Я не получил слишком много больше, чем ставил "Hello World".:-) Простое руководство было бы полезно. Это что-то, что Рак был бы полезен? Как бы вы порекомендовали мне написать тесты для этого животного? (Я использую интерфейсы и системы автомоделирования, чтобы издеваться над такими вещами, как http-запросы в .net. С ducktyping кажется, что это может быть проще, но я не знаю, как сказать, что мой код использует поддельную утку в тесте, но реальный на практике)

Спасибо всем. Извините за такой такой долгий, открытый вопрос.

Ответ 1

Я бы порекомендовал две вещи:

  • Централизовать вашу конфигурацию в реплицированном, отказоустойчивом репозитории, например ZooKeeper, CouchDB и т.д. Вы можете поместить всю информацию, необходимую для загрузки различных сред в этой системе, так что единственная конфигурация, которая вам нужна для отдельного компонента, - это местоположение этого репозитория, Это значительно улучшит масштабируемость вашей среды.

  • Используйте что-то вроде Puppet для развертывания и управления сервером. Это гарантирует, что все ваши машины находятся в правильном состоянии в любой момент времени, и это позволит легко развертывать. Это невероятно мощно и сделает вашу жизнь намного проще.