Развертывание сайта с помощью Git: хук после обновления работает сначала, а потом никогда
Возникла странная проблема с крючком git после обновления. Я создал репозиторий на моем сервере (/var/www/vhosts/git/master.git
) и в этом хранилище добавлен хук после обновления со следующим кодом:
#!/bin/sh
echo $1
echo "*UPDATE*"
case " $1 " in
*'refs/heads/master'*)
GIT_WORK_TREE=/var/www/vhosts/website.com/sandbox.website.com git checkout -f
echo
echo "Master was updated!"
echo
;;
esac
case " $1 " in
*'refs/heads/sandbox'*)
GIT_WORK_TREE=/var/www/vhosts/website.com/sandbox.website.com git checkout -f
echo
echo "Sandbox was updated!"
echo
;;
esac
Я убедился, что этот файл исполняемый. Затем я создал локальный репозиторий на моей машине, используя:
$ mkdir website && cd website
$ git init
$ echo 'Testing.' > index.html
$ git add index.html
$ git commit -q -m "Initial commit"
$ git remote add web ssh://username@website.com/var/www/vhosts/website.com/git/master.git
$ git push web +master:refs/heads/master
По какой-то причине этот первый толчок работает просто отлично -/var/www/vhosts/website.com/sandbox.website.com
обновляется с помощью индексного файла, но тогда ни одно из следующих действий не работает. Я получаю ответ от post-update
крючок с надписью "Мастер был обновлен!" но каталог на самом деле не обновляется.
Предложения?
1 ответ
У вас, похоже, есть проблема с разрешением. Посмотрите на разрешения на/var/www/*
путь и убедитесь, что у вашего пользователя git есть права на чтение / запись / удаление файлов.
Я использовал гораздо более простую технику (здесь приведен подробный сценарий), которая позволила мне использовать свой сервер в качестве git-сервера с gitolite и развертывать его без необходимости клонирования репозитория на /var/www/myproject
дорожка. Это работает для меня на git 1.7.9
а также Ubuntu 12.04.1 LTS
с Apache/2.2.22
,
Создайте свой архив на сервере:
mkdir myproject.git && cd myproject.git git init --bare
Настройте репозиторий:
git config core.worktree /var/www/myproject git config core.bare false git config receive.denycurrentbranch ignore
Редактировать или создать
hooks/post-receive
и сделать его работоспособнымtouch hooks/post-receive chmod u+x hooks/post-receive
Вот содержимое файла:
#!/bin/sh
git checkout -f
Вы готовы сделать толчок и заставить его работать.
Мой пользователь git называется git
и мой апач использовал ubuntu
пользователь. Я должен был изменить конфигурацию Apache на /etc/apache2/conf.d/security
(вы можете сделать это на /etc/apache2/http.conf
также) включить:
User git
Group git
Теперь мой /var/www/myproject
развертывает все файлы на push, создавая файлы с git:git
user / group и my apache для запуска использует один и тот же пользователь / группу.
Теперь вам просто нужно перезагрузить сервер или сделать service apache2 restart