Управление релизами проектов Hudson и PHP
Я хотел бы спросить о реальном опыте управления выпусками PHP-проектов через CI-сервер Hudson.
Наши проекты разделены на подпроекты: внешние интерфейсы, фреймворки, библиотеки. Все хранится в нашем SVN как собственный проект. Различные интерфейсы могут зависеть от разных версий фреймворка, который сам зависит от разных версий библиотек.
Пока что мы делаем управление релизами вручную. У нас есть одна среда, служащая для тестирования и производства, чтобы избежать проблем различий в среде при выпуске проекта. Мы помечаем каждый подпроект в SVN номером выпуска и извлекаем все для тестирования, доступного в тестовом домене. После того, как мы выполним тестирование и исправим ошибки, мы помечаем новые версии всего в SVN как производственные и связываем производственный домен, чтобы указывать на новый код. У этого ручного процесса есть свои очевидные проблемы, и мы не можем его сохранить.
В рамках моего исследования перехода на автоматизированное решение я уже установил Hudson и настроил его для проектов PHP (Phing, ppUnit и т. Д.). Я знаком с написанием сценариев сборки под Phing или Ant. Я изучил все возможные "основы" создания среды CI, подготовки проекта и сделал это. То, что я не нашел, - это пример управления выпусками, аналогичный тому, что мы делаем вручную с учетом всех имеющихся у нас зависимостей. Можете ли вы указать мне в правильном направлении?
1 ответ
Боюсь, что нет такой сложной вещи легко доступны. Нам пришлось решить довольно похожую проблему, и в итоге мы использовали очень похожую конфигурацию, которую вы планировали использовать (или уже использовали).
У нас есть несколько ядер приложений, а затем конкретные модификации клиента. Все хранится в SVN. Кроме того, мы используем svn:externals для связи Framework и других сторонних библиотек с приложением.
Все делается с помощью Phing, и, хотя нам потребовалось некоторое время, Phing очень помог, и я действительно могу рекомендовать это.
Клиентские аддоны выбираются автоматически с помощью phing. Все настраивается через свойства сборки.
Для обновлений схемы базы данных мы очень довольны dbdeploy, который является частью Phing. Хотя нам пришлось немного изменить его для наших нужд.
Кроме того, мы добавили поддержку для создания предварительно сконфигурированного самораспаковывающегося установщика Linux, поэтому весь сложный процесс создания развертываемого пакета состоит из вызова одной цели phing и передачи правильного файла свойств сборки. Чтобы создать эти установщики, мы используем эту простую технику (http://www.linuxjournal.com/node/1005818). Снова используя Phing, созданный пакет автоматически загружается на целевой сервер и выполняется по SSH для выполнения развертывания.
Затем мы используем Hudson для автоматического создания пакетов установщика (в дополнение к автоматическому запуску тестов phpunit и Selenium/Hmres) и их хранения в определенном месте / или как артефакты. Затем наша служба поддержки может получить пакеты и самостоятельно выполнить производственное развертывание (наши среды QA/Test автоматически обновляются Hudson).
Кроме того, код автоматически кодируется и лицензируется с использованием ZendGuard, где это необходимо.
Краткое описание выше просто для иллюстрации того, что может быть достигнуто с помощью Hudson, Phing, SVN и PHP. Полные технические детали, очевидно, были бы слишком длинными для этого поста, но я был бы рад более подробно остановиться где-нибудь еще.