0

В настоящее время я работаю с запуском, находящимся в переходной фазе.Непрерывное развертывание по кластеру серверов

У нас есть веб-приложение PHP и мы используем непрерывную интеграцию со стандартными модулями и регрессионными тестами (селен), выполняющимися над jenkins. У нас есть сервер разработки, на котором размещается новый код и промежуточный сервер, который поддерживает сборку, готовую к развертыванию на рабочий сервер. Способ развертывания на производственном сервере осуществляется с помощью рудиментарного сценария, который извлекает последнюю копию svn и перезаписывает изменения в каталоге htdocs. Любые изменения SQL применяются через функцию синхронизации из MySQL Workbench.

Эта настройка отлично подходит для очень простой среды, но теперь мы переходим от установки одного сервера к кластерам из-за большого трафика, и я столкнулся с головоломкой.

  • Моя главная забота как именно мы включаем развертывание из одного сервера в кластере серверов? Каждый сервер будет иметь свои собственные htdocs и базу данных SQL и при текущей настройке мне нужно будет выполнить сценарий на каждом сервере, который звучит как отвратительная вещь до . Я изучал марионетку, которая может использоваться для автоматизации задач sysadmin, но я не уверен, является ли это грозным подходом для развертывания новых сборок в кластере.

  • Моя вторая проблема связана с базой данных. Теперь мое предположение о том, что изменения кода будут применены немедленно, но поскольку у нас будет репликация master/slave db, моя проблема заключается в том, что изменения в базе данных будут занимать больше времени для распространения и, таким образом, ввести несоответствия во время развертывания. Как синхронизировать код AND и одновременно?

  • Моя третья проблема связана с автоматизацией изменений базы данных. Кто-нибудь знает, каким образом я могу автоматизировать процесс обновления схемы БД без ручного запуска синхронизации? В настоящий момент я должен вручную запустить инструмент синхронизации рабочего инструмента, тогда как я действительно ищу подход фиксации и забывания. Я фиксирую это, и изменения БД автоматически синхронизируются по настройкам dev и QA.

+0

Какую структуру PHP вы используете? Предоставляет ли он инструменты для миграции? Кроме того, * Subversion *? Почему бы не раздавать что-то вроде 'git' или Mercurial? Subversion имеет тенденцию быть болезненно медленным на нетривиальных кодовых основах. – tadman

+0

Я использую Zend Framework 1.12. Это было решение, сделанное коллегой перед тем, как я был открыт. – Rijndael

ответ

1

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

Я бы рекомендовал вам создать настоящие миграции для миграции баз данных, чтобы отслеживать их через svn или что-то еще. В этом случае вы также можете предоставить информацию, как откат. Я использую https://github.com/doctrine/migrations, но главным образом потому, что я использую доктрину как ORM.

Если у вас есть средство миграции, вы можете легко добавить команду в свой сценарий развертывания, чтобы выполнить эти миграции после развертывания.

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

Смежные вопросы