Есть три места, о которых вы говорите:
- Сами хранилища Subversion.Это где весь исходный код будет жить.Хранилище будет доступно через клиент Subversion, который будет общаться с сервером.Сервер может использовать протокол SVN или HTTP / HTTPS .Если вы хотите использовать HTTP / HTTPS , вам необходимо настроить сервер Apache.Если вы хотите запустить SVN , вам потребуется запустить процесс
svnserve
. - Локальный рабочий каталог в системе разработчика.Это где файлы извлекаются, и где разработчик может вносить изменения.Это не обязательно на одной машине с хранилищем.
- PHP Webserver.Вот где файлы PHP должны быть для работы и, возможно, для тестирования.
Давайте рассмотрим это по одному: либо с SVN , либо с HTTP/ HTTPS , можно ограничить круг лиц, которые могут видеть, извлекать и фиксировать код в хранилище.В Subversion вы можете указать это на уровне каталога.Таким образом, один разработчик может проверить код на http://myserver/svnrepos/module1
, а другой может проверить и вывести код с http://myserver/svnrepos/module2
, и ни один не может увидеть ваш код на http://myserver/svnrepos/core
,
Сложная часть заключается в получении этой информации насервер для тестирования.Вопрос в том, как разрешить разработчикам совершать коммиты, не обязательно помещая код на сервер.Есть несколько способов сделать это.
Один из них - создать ветку server .Если разработчик хочет получить код на PHP-сервере, он должен объединить код с веткой server .Затем вам нужен механизм для перемещения кода из хранилища на сервер PHP.
Я бы не использовал ловушку post-commit для этой цели.Вы не хотите, чтобы разработчик ждал, пока хук скопирует свой код на сервер.Кроме того, вы, вероятно, захотите включить и выключить сервер.
Вместо этого используйте crontab, который будет наблюдать за хранилищем Subversion (особенно ветвями server ), а затем, когда обнаружит изменение., выключите сервер, обновите файлы на сервере, а затем снова включите сервер.Мой метод заключается в использовании двух разных каталогов.Иметь каталог1 на сервере.Используйте svn export
для экспорта файлов в каталог2.Таким образом, сервер все еще работает.Затем отключите сервер, переместите directory2
в directory1
и снова включите сервер.Это сводит время простоя к минимуму, а сервер находится в более или менее стабильном состоянии.
Однако вам следует обратиться к Jenkins , чтобы помочь вам в вашем проекте.Дженкинс позволит вам и вашим разработчикам видеть их изменения (вы можете ограничить, кто что видит), проводить базовое тестирование.Например, вы можете запустить PHPMD (посмотрите, насколько грязный код) и CPD (копировать, вставить детектор) после фиксации, и Дженкинс покажет результаты.Затем вы можете поместить кнопку deploy на Jenkins, и разработчик может развернуть их сборку на сервере.
Jenkins прост в установке и использовании.Существует множество плагинов для различных систем отслеживания дефектов, Subversion и различных модулей тестирования.Я не знаю, сколько доступно для PHP, но вы можете посмотреть.