Инструменты сборки / интеграции на PHP: вы их используете?
Прочитав статью "Современный рабочий процесс PHP" в выпуске журнала php | architect за ноябрь 2008 года, в которой обсуждались модульное тестирование ( phpUnit), инструменты сборки ( Phing) и непрерывная интеграция ( Xinc), я вдохновился узнать больше о некоторых инструменты доступны для PHP, особенно Phing.
В прошлом я часто выполнял развертывание на производственном сервере, запустив работающий сайт в качестве рабочей копии subversion и просто запустив "svn update" в производственной среде, чтобы развернуть последнюю версию кода.
Используете ли вы инструменты сборки для кода PHP? Какие преимущества, по вашему мнению, они предлагают перед развертыванием напрямую из Subversion? Что я должен высматривать, или с какими проблемами я могу столкнуться?
4 ответа
Я использовал и Phing, и Ant, и предпочитаю последнее гораздо больше. Первоначально я пошел с Phing, потому что он написан на PHP, но, честно говоря, он не такой зрелый, как Ant. В конце концов, наличие зрелой системы сборки с большим сообществом стоит больше.
Что сделано с Ant/Phing:
- От базового извлечения loalize до определенного языка, убедитесь, что есть зависимости (другие библиотеки, каталоги и т. Д.)
- если у вас есть, скомпилируйте шаблоны и т. д.
- Приведите целевую базу данных к требуемой версии, в зависимости от версии проверенного кода
- запускать юнит-тесты и т. д.
Большая проблема, которую я вижу с Phing, заключается в том, что он создает ненужный слой косвенности. PHP является языком сценариев, и поэтому может быть запущен напрямую. Использование Phing XML-конфигурации плохо подходит для языка: она обеспечивает более читаемую декларативную конфигурацию, но за счет потери какой-либо гибкости языка. С Ant (вдохновением для этого маршрута) это имеет смысл, поскольку у Java не было такой гибкости, поскольку она менее динамична и требует компиляции.
К сожалению, я не видел много хороших альтернатив в PHP-пространстве, и, в отличие от других языков, инструменты сборки не так важны или не являются частью культуры, поэтому развитие другого хорошо поддерживаемого варианта может произойти не скоро.
Поэтому я бы придерживался опций, которые ближе к возможностям PHP из культур, которые более агрессивно поддерживают инструменты сборки. Я обычно использую Gradle. Rake также отлично работает в зависимости от того, на каком языке вы хотите обмануть (и могут быть другие подобные варианты). Вы должны также взвесить такие вещи, как поддержка Webdriver, если вам нравятся такие вещи. В противном случае создание облегченного решения с использованием PHP и / или BASH должно охватывать все, сохраняя прозрачность
В проекте, над которым я сейчас работаю, мы используем phpUnderControl для запуска тестов и получения быстрой обратной связи, когда что-то сломалось. Мы планируем использовать его для запуска других тестов, например, написанных на Watir.
Я посмотрел на Phing на это выглядит довольно круто. Для проекта, над которым я работаю, я на самом деле использую Ant Apache. Я использую это, чтобы сделать несколько вещей:
- Объединение и сжатие Javascript и CSS (сжатие выполняется с помощью YUI Compressor
- Замените стандартные конфигурационные файлы производственными конфигурационными файлами (например, переименуйте config.php.production в config.php)
- Удалите ненужные файлы (например, файл сборки ant, build.xml)
Я думаю, что Phing стоит посмотреть поверх Ant, потому что это нативный PHP, что может быть приятно. Также, если вы делаете что-то большее, чем просто копирование / перемещение файлов, обратите внимание на проблемы с производительностью при переходе в производственную среду. У меня была проблема, когда компрессор YUI работал нормально на моей локальной машине, но на относительно небольшом VPS он работал очень медленно.