Я пытаюсь найти лучший способ сшить быстрый, повторяемый, нерушимый процесс сборки для следующей среды. У меня есть план, как это сделать, но я бы очень признателен за критику. (Я бы также оценил некоторый пример кода, но об этом позже)
Экосистема - логическая:
- Веб-сайт - 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 кажется, что это может быть проще, но я не знаю, как сказать, что мой код использует поддельную утку в тесте, но реальный на практике)
Спасибо всем. Извините за такой такой долгий, открытый вопрос.