Является ли плохой идеей использовать один промежуточный сервер для размещения нескольких веток git?
Например, если сервер непрерывной интеграции автоматически запускает комплект подготовки Ansible, Chef, Puppet и т. Д. После завершения всех тестов и развертывает приложение на StagingApplicationServer.com/ <имя ветки здесь>
Это позволит поэтапно использовать ветки master, development и другие функции.
Если это неплохая идея, есть ли способ разделить разные ветки в одной системе? Так, например, служба Nginx / Redis / MongoDB для ветки 1 может отличаться от ветки 2 и быть легко разрушена.
Вращение инстансов Amazon EC2 на короткий период времени было бы идеальным вариантом, но, к сожалению, это не вариант. Кроме того, использование поддоменов не подходит для этого конкретного приложения.
РЕДАКТИРОВАТЬ:
Для конкретных деталей приложение представляет собой приложение Python Flask, использующее Redis, MongoDB. Серверы оснащены Ansible.
РЕДАКТИРОВАТЬ2:
Чтобы уточнить, я обеспокоен тем, что это плохая идея, потому что везде, где вы читаете, ваши среды разработки, подготовки и производства должны быть как можно ближе друг к другу. Это означает, что если ваша стратегия развертывания работает для промежуточной стадии, вы сможете без проблем реплицировать ее для производственной среды. то есть, если ваши сценарии Ansible работают на постановке, они будут работать и на производстве.
Чтобы разместить несколько веток при постановке, вам необходимо настроить Nginx, например, конфигурацию. Вам также может потребоваться изменить способ настройки ваших баз данных, или вы можете выполнить дополнительные шаги, чтобы подготовить виртуальную машину для хранения ваших баз данных и т. Д. Все это в конечном итоге делает вашу промежуточную среду отличной от производственной.
Я не вижу причин, по которым это было бы плохой идеей. Постановка подразумевает непроизводственную услугу, поэтому вы можете разместить всю стадию на одном сервере, не беспокоясь об избыточности, производительности и т. Д. Еще одна причина для разделения приложений и экземпляров приложений связана с безопасностью, но еще раз для непроизводственной service это не вызывает беспокойства, если только вы не размещаете копию своих производственных данных на промежуточном сервере (это еще один тип разделения, о котором следует подумать). Если есть проблемы с безопасностью и вы не можете использовать поддомены, вы все равно можете использовать проксирование в nginx для разделения экземпляров на несколько виртуальных машин. Но в простейшей форме вы бы просто запустили их все в одном экземпляре и использовали директивы location, чтобы определить, какое приложение запускает каждый путь.
nginx не заботится о том, как вы разделяете свои приложения, хотя вам необходимо настроить другую конфигурацию прокси (либо разные порты, либо разные места для файлов конфигурации, в зависимости от сервера приложений) для каждого сервера приложений в зависимости от каталога. Как вы это сделаете, в некоторой степени будет зависеть от того, какой у вас сервер приложений, который вы не указали.
Например, если Ruby использует сервер приложений Passenger, вы должны следовать этим инструкциям: https://www.phusionpassenger.com/documentation/Users%20guide%20Nginx.html#deploying_rails_to_sub_uri
Обратите внимание, что Passenger скрывает от вас некоторые детали реализации, поэтому вам не нужно думать о портах, а только о каталогах. Тогда как в следующем примере вы должны указать порт для проксирования, и он должен быть разным для каждого экземпляра приложения.
Используя Perl Mojolicious, вы можете следовать этому примеру: http://search.cpan.org/~sri/Mojolicious-5.27/lib/Mojolicious/Guides/Cookbook.pod#Nginx
Обратите внимание, что location
раздел в любом примере можно реплицировать для любого количества путей, в которых вам нужны независимые экземпляры вашего приложения. Это то же самое, что и запуск нескольких приложений; вы просто даете каждому свой каталог и файлы конфигурации.
Я подозреваю, что причина, по которой вы до сих пор не получили ответов, заключается в том, что вы не предоставили никакой конкретной информации о своем развертывании. Мне трудно дать совет, если вы указали, что будете использовать «Ansible, Chef, Puppet и т. Д.» и "Redis / MongoDB" ... вы используете все эти вещи, несмотря на то, что они выполняют очень похожую работу? Большинство людей выбирают один инструмент развертывания (из Ansible, Chef, Puppet и т. Д.) И одно хранилище ключей / значений (Redis / MongoDB). Примеры конфигурации для всего этого и предостережения, на которые следует обратить внимание, будут разными для каждого из них.
В любом случае, краткий ответ на ваш вопрос: да, вы можете это сделать, и нет никаких технических причин, по которым вам не следует этого делать.