У кого-нибудь есть рабочий процесс разработки/постановки/развертывания с php/mysql? [закрыто]
Я думаю о хорошем рабочем процессе для веб-разработки php/mysql.
У кого-нибудь есть какие-нибудь советы?
2 answers
Вот что мы делаем:
- Каждый работает над своими проектами в своей отрасли (код, тесты и т.д.)
- Когда все выглядит хорошо, оно объединяется в магистраль
- phpUnderControl перестраивает магистраль, запускает все наши PHPUnit тесты, создает документацию, обновляет базу данных и т. Д.
- Если все это пройдет, мы сольемся в стабильную
- Стабильная полностью перестраивается, как магистраль
- Стабильность вручную повышается на наш производственный сервер
Мы у вас есть несколько пользовательских сценариев, которые позаботятся об обновлении нашей базы данных и нашем продвижении к производству. Для нашей базы данных мы храним все дельты в одной папке, и скрипт проверяет текущий уровень базы данных на соответствие доступным дельтам и, при необходимости, применяет их.
Для продвижения в производство у нас есть еще один скрипт, который удаляет все производственные данные, а затем запускает rsync для внесения изменений.
Вы не упоминаете, какой уровень контроля у вас есть над серверами, но в целом процесс был бы таким же для общего развития.
Я думаю, что все делают эти вещи немного по-разному, в зависимости от конкретного применения. Вот наша настройка:
Перед выпуском:
- Все обязуются
/trunk
. - Когда мы хотим запустить выпуск, мы копируем магистраль в
/tags/yymmddhhiiss
. - Мы стабилизируем метку.
Как только он стабилизируется, мы запускаем сценарий развертывания:
- На рабочем сервере извлеките новый тег.
- Создайте дамп базы данных.
- Остановить демонов и завершите работу веб-приложений.
- Переключите символическую ссылку
/current
, чтобы указать на только что извлеченный тег. - Запустите сценарии миграции.
- Перезапустите демонов и приложения.
Если нам нужно быстро внести небольшое изменение, мы объединяем его с текущим тегом, а затем можем запустить гораздо более простой процесс исправления на сервере:
- Остановите демонов и завершите работу веб-приложений.
- Выполнить
svn update
- Перезапустить демонов и приложения.
Обратите внимание, что существуют определенные инструменты, которые направлены на структурирование/автоматизацию этих процессов. Phing является одним, и Symfony имеет свою собственную пакетную систему, которая раньше была самостоятельным проектом под названием pake. И как будто этого недостаточно, Zend Framework собирается создать свой собственный вариант. Все это действительно немного запутано, но Phing, вероятно, наиболее широко используется. Вы также можете использовать что-то, не относящееся к php, например как Муравей или Капистрано. Мы просто используем сценарии оболочки, которые в основном удовлетворяют ту же потребность.
У нас также есть непрерывная сборка, которая выполняется из магистрали и выполняет все тесты. В настоящее время у нас есть только базовая коллекция сценариев оболочки, выполняющих это, но мы рассматриваем возможность перехода на phpUnderControl или xinc.
Шаг миграции, возможно, заслуживает небольшого объяснения. Файл содержит изменения в базе данных, а также другие задачи, которые необходимо выполнить для нового выпуска. На данный момент наши миграции немного просты; У нас просто есть папка с кучей сценариев .php
и .sql
, и во время миграции они выполняются последовательно. Способ, которым мы отслеживаем, какие изменения были выполнены, заключается в очистке папки migrations
сразу после создания нового тега. Вероятно, было бы разумнее использовать базу данных для регистрации изменений, которые были выполнены. Считается, что мы принимаем что-то вроде хулиганства для этой цели.