Система PHP Build

Я использую PHPUnderControl, который работает поверх Cruise Control для моей непрерывной интеграции и модульного тестирования. У меня также есть настройка для запуска PHPDocumentor для генерации phpdoc для меня, и он запускает PHP Code Sniffer для обеспечения соблюдения стандартов кодирования для меня. Но теперь я хочу настроить что-то на том же сервере (Ubuntu), чтобы упростить развертывание на удаленном сервере. У меня уже есть настройка, поэтому после каждой успешной сборки SVN Export выполняется из trunk в каталог в папке проектов на сервере.

Я подумывал написать небольшой пользовательский PHP script, который будет SSH на настроенном удаленном сервере, архивировать последний экспорт, скопировать его, распаковать и запустить любые миграции. PHP скрипт вроде этого не должен быть слишком сложным изначально, если мне не понадобится в конечном итоге начать масштабирование на несколько серверов. Я знаю, что существуют системы, такие как Phing, Fabric и другие.

Мой вопрос в том, есть ли у кого-нибудь опыт с ними и может предоставить некоторые профи и con? Я начал настраивать Phing на своем сервере и будет пытаться использовать Fabric рядом с ними, но задавался вопросом, может ли кто-нибудь, кто использовал их более широко или должен был масштабировать их, мог бы дать некоторую обратную связь.

Ответ 1

Я использовал Capistrano с PHP (хотя это больше похоже на Rails-y, как написано в Ruby).

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

Однако, как и большинство вещей Ruby, есть много крючков и "магии", которые могут запутаться, если вы новичок в Capistrano и пытаетесь сделать что-то сложное с ним.

Что касается того, как он сравнивается с другими инструментами развертывания, я не могу комментировать. Я знаю, что мы использовали Финга, но я не уверен, почему мы перешли на Капистрано.

Ответ 2

Если вам нравится Capistrano, но пожелал, чтобы это было немного больше PHP'ish, посмотрите Fredistrano.

Я написал автоматическую сборку (экспорт SVN, кодировку Zend Guard и т.д.) и систему развертывания с использованием Phing один раз и нашел большую боль в использовании. Всякий раз, когда мне приходилось писать специальную задачу, я чувствовал, что мне нужно перепрыгнуть через многие обручи, чтобы заставить ее работать.

Итак, в эти дни я просто пишу простые сценарии bash, которые строят с проверкой SVN, кодированием, созданием тега в SVN и развертыванием через rsync. Это может быть низкотехнологичное, а у Phing могут быть некоторые превосходные функции, но по крайней мере это не мешает мне.

Ответ 3

Theres новый инструмент построения, называемый Bldr. Он использует Yaml для config, вместо xml, как и большинство систем сборки, и его сильно расширяемый.

http://bldr.io

Ответ 4

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

Ответ 5

Если бы я должен был внедрить такую ​​систему развертывания, я бы выбрал немного другое решение из того, что вы описали выше. Вместо того, чтобы иметь код, который выполняется локально в моей системе, подключается к списку удаленных серверов и выполняет "работу" там, я бы упаковал модуль обновления с остальной частью кода и вытащил данные обновления с моего сервера по требованию (точнее, когда я "сказал" это сделать). Таким образом, вам гораздо меньше беспокоиться о вашем конце (вам просто нужно обслуживать обновленный код через http по запросу, а удаленный сервер обрабатывает остальные). Только мои 2 цента.

Ответ 6

Я написал свой собственный инструмент rsync для этого, потому что я работаю с очень плохим подключением к Интернету в третьем мире и имею все виды сбоев и голодающих соединений, так что rsync не работает.

В вашей удаленной системе вы должны хотя бы написать litte script, который делает резервные копии перед запуском миграции.

Лучше вы используете полную независимую зеркальную систему на своей веб-хост-системе и включаете некоторые небольшие, но фундаментальные модульные тесты после миграции. Затем выполните переключение root, чтобы обновить веб-сайт в Интернете. Это потребовало бы запуска нескольких интерактивных сервисов в режиме только для чтения во время миграции (к сожалению, функция, которую не так много людей реализует).

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