SVN - Как сохранить конфиденциальность исходного кода ядра и предоставить фрилансерам доступ только к модулям - PullRequest
1 голос
/ 25 сентября 2011

Я занимаюсь разработкой модульного приложения PHP.Как руководитель и владелец проекта, я хочу сохранить конфиденциальность ядра.Фрилансеры будут работать с модулями (скажем, 1 фрилансер за 1 модуль, где они не видят чужой модуль).

Я создал репо для ядра (1 репо) и модулей (1 репо для 1 модуля).AFAIK репо должен быть размещен за пределами htdocs.Теперь я подумаю об этом сценарии: используя SVN, я дам доступ к репо A для фрилансера A, репо B для фрилансера B и т. Д. При проверке A у него на компьютере будет только модуль A для редактирования.Чтобы проверить его модуль, он совершит.Но поскольку он идет в svn dir вместо htdocs, он не сможет проверить это мгновенно.Затем ему нужно будет экспортировать принятый код в htdocs.Ну, я хочу пропустить этот шаг экспорта.

(1) Есть ли способ, которым он может передать свой код непосредственно в htdocs, чтобы проверить его, чтобы сделать его более практичным?

(2)Есть ли лучший сценарий для достижения этой цели (то есть, фрилансер может только читать / писать модуль, над которым он работал, и не иметь доступа - даже читать - к другому модулю и базовой системе)?

1 Ответ

1 голос
/ 25 сентября 2011

Есть три места, о которых вы говорите:

  • Сами хранилища 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, но вы можете посмотреть.

...