Как вы управляете процессом сборки [с помощью Phing]?

Я пытаюсь использовать Phing для автоматизации:

  • текущие тесты
  • запуск миграции БД на каждом компьютере разработчика [с использованием dbdeply]
  • развертывание в производство при необходимости

Я думаю, что имеет смысл добавить папку сборки в мой проект и поместить все мои файлы конфигурации сборки и db deltas в эту папку. и зафиксируйте все это в хранилище SVN. таким образом, каждый разработчик получит обновленные файлы сборки при выходе из svn. и иметь возможность запустить сборку, чтобы обновить свою БД с новыми изменениями.

на рабочем сервере: я планировал добавить еще один файл сборки, чтобы получить последнюю версию Tagged в svn и выполнить сжатие CSS и JS.


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

Итак, вы думаете, что все это имеет смысл, или у вас есть другие лучшие предложения?

1 ответ

Решение

То, что вы говорите, имеет смысл: оно довольно близко к тому, что я часто использую (иногда с ant, иногда с phing, а иногда с некоторыми shell-скриптами).

в build каталог, у меня было бы что-то вроде этого:

build/
    testing/
    development/
    staging/
    production/
    common/

С одним build.xml файл в каждом подкаталоге - все, включая другой build.xml файл, расположенный в common каталог, идея состоит в том, чтобы поместить как можно больше "общего" кода в "общий" build.xml файл, и иметь специфичные для среды файлы, которые содержат как можно меньше кода XML.

Это можно сделать с помощью import задача, которая существует в последней версии phing (не уверен, что она в стабильной версии - я использую проверку phing в SVN, чтобы получить ее, для проекта, над которым я сейчас работаю).


Однако, одна вещь: вы говорите, что хотите развернуть на рабочем месте с рабочего сервера; Я бы предпочел вместо этого:

  • на сервере "разработки":
    • экспорт из SVN
    • сжать JS/CSS и все такое
    • создать архив tar.gz
  • загрузить этот архив на рабочий сервер
  • на "производственном" сервере:
    • распакуйте этот загруженный архив
    • измените пару символических ссылок, чтобы использовать новую версию источников (см. ответ, который я дал здесь, для получения дополнительной информации)
    • обновить, что должно быть сделано в БД

Идея заключается в том, чтобы:

  • делать как можно меньше вещей на производственном сервере
    • на случай, если что-то пойдет не так
    • и в случае, если однажды ваш рабочий сервер не будет иметь доступа к серверу SVN
  • иметь физический архив, который можно развернуть на нескольких производственных серверах


Да, и как примечание: вы должны написать некую документацию "как развернуть в производство", шаг за шагом!

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

Другие вопросы по тегам