У меня есть проект, размещенный на 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.
Из вашего описания я не совсем понимаю, от кого работает ловушка, но этот подход может упростить ситуацию.
Это типичные проблемы с разрешениями. Решения всегда немного грязные, поскольку предполагают внесение изменений в работающую файловую систему. В любом случае возможные варианты у вас есть:
Разрешения для всех на http сервере document_root
Беги как sudo
действия после получения
Измените разрешения для http-сервера document_root по запросу, т.е. когда в течение пост-получения. Для такого варианта обычно используют:
find $PUBLIC_WWW -type f -print0 | xargs -0 chmod 666
find $PUBLIC_WWW -type d -print0 | xargs -0 chmod 777