Назад | Перейти на главную страницу

развертывание проекта git и проблема с разрешением

У меня есть проект, размещенный на gitolite на моем собственном сервере, и я хотел бы развернуть весь проект из репозитория gitolite без репозитория в доступное место apache с помощью обработчика post-receive.

У меня есть следующий контент

echo "starting deploy..."

WWW_ROOT="/var/www_virt.hosting/domain_name/htdocs/"

GIT_WORK_TREE=$WWW_ROOT git checkout -f

exec chmod -R 750 $WWW_ROOT
exec chown -R www-data:www-data $WWW_ROOT
echo "finished"

ловушка не может быть завершена без сообщения об ошибке.

chmod: changing permissions of `/var/www_virt.hosting/domain_name/file_name': Operation not permitted

означает, что у git недостаточно прав на это.

Исходный путь git: /var/lib/gitolite/project.git/, который принадлежит gitolite:gitolite

И с этими разрешениями redmine (работал под пользователем www-data) не может получить репозиторий git для получения всех изменений

Здесь нужно разместить весь проект: /var/www_virt.hosting/domain_name/htdocs/, который принадлежит www-data:www-data.

Какие изменения мне нужно сделать, чтобы правильно работать после приема в git и redmine с репозиторием?

то, что я сделал, это:

# id www-data
uid=33(www-data) gid=33(www-data) groups=33(www-data),119(gitolite)
# id gitolite 
uid=110(gitolite) gid=119(gitolite) groups=119(gitolite),33(www-data)

не помогло.

Я хочу, чтобы у меня не было проблем с работой apache (для просмотра проекта), redmine для чтения исходных файлов для проекта (под git) и git (развертывание на доступный путь www-data)

что я должен делать ?

Могу я сделать несколько иное предложение? Вместо того, чтобы делать git checkout в каталог, попробуйте архив git? В вашем крючке сделайте:

git archive --format=tar | (cd $WWW_ROOT; tar xf -)

Обратите внимание, что вы можете установить umask в переменной конфигурации tar.umask git.

Из вашего описания я не совсем понимаю, от кого работает ловушка, но этот подход может упростить ситуацию.

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

  1. Разрешения для всех на http сервере document_root

  2. Беги как sudo действия после получения

  3. Измените разрешения для http-сервера document_root по запросу, т.е. когда в течение пост-получения. Для такого варианта обычно используют:

    find $PUBLIC_WWW -type f -print0 | xargs -0 chmod 666
    find $PUBLIC_WWW -type d -print0 | xargs -0 chmod 777