Развертывание сайта с помощью 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,

  1. Создайте свой архив на сервере:

    mkdir myproject.git && cd myproject.git
    git init --bare
    
  2. Настройте репозиторий:

    git config core.worktree /var/www/myproject
    git config core.bare false
    git config receive.denycurrentbranch ignore
    
  3. Редактировать или создать 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

Другие вопросы по тегам