Как (и где) должен быть определен хук для автоматической загрузки веб-сайта в рабочую среду?

У меня есть центральный сервер, выступающий в роли сервера git, и я отправляю свои изменения с другого компьютера. Параллельно работаю и с другим разработчиком. Он подготовил хук на сервере git, поэтому, когда мы нажимаем, он извлекает любые изменения.

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


person Sergi Juanola    schedule 04.07.2011    source источник


Ответы (2)


Ваш вопрос не совсем ясен и требует более подробной информации о вашей настройке.

Если вы хотите загрузить свой рабочий сервер (или отправить на свой рабочий сервер с центрального сервера), и если вы используете такие хуки, как update, post-receive или post-update, вы можете легко сделать их pull или push, только если вы зафиксируете стабильная ветка.

Взяв конкретный пример хука update на центральном сервере, он принимает три параметра:

- the name of the ref being updated,
- the old object name stored in the ref,
- and the new objectname to be stored in the ref.

Проверив имя ссылки на то, что вы хотите ( стабильно ), а затем выполнив push или pull на рабочем сервере, вы сможете получить желаемое выборочное обновление.

http://git-scm.com/docs/gitooks

person manojlds    schedule 04.07.2011
comment
Большое спасибо. Это было именно то, что я искал! - person Sergi Juanola; 05.07.2011

Вы не можете нажимать на рабочий сервер, потому что а) по умолчанию git не будет нажимать на не голый репозиторий, и б) если вы принудительно сделаете это, он может обновить только репо, а не рабочий каталог. Вы должны попасть в каталог производственного репозитория и извлечь оттуда. Вы можете автоматизировать это с помощью хука после получения в центральном репо, и вы должны быть готовы решать проблемы с владением файлами.

person Dan Ray    schedule 05.07.2011
comment
Как насчет отправки на производственный сервер и перемещения новых файлов в нужную папку с помощью пост-получения? - person Sergi Juanola; 05.07.2011
comment
Спасибо, приятель, я попробую через пару дней, как только снова воспользуюсь системой. Я буду держать вас в курсе =) - person Sergi Juanola; 05.07.2011
comment
Для вашего пост-приема, вероятно, потребуется cd в рабочий каталог, а затем git checkout master. Должен работать. - person Dan Ray; 05.07.2011
comment
Имейте в виду, что это не избавит вас от проблем с владением файлами. Вполне возможно, что пользователь, работающий для обработки приема, может не иметь прав на файлы в каталоге. В этом случае вам, вероятно, потребуется использовать sudo, который, вероятно, нужно будет настроить так, чтобы ваш пользователь git был sudoer и работал без tty. - person Dan Ray; 05.07.2011
comment
Хм, я не думал об этом. В любом случае, я поговорил с моим товарищем по команде, и мы пришли к другому возможному решению: с нашего сервера lan git, когда он получит стабильную ветку, подключиться через sftp к серверу prod и загрузить туда новые файлы (или, может быть, свежий Обновить). Мы уменьшаем количество хуков, плюс я думаю, что мы могли бы лучше обрабатывать разрешения. - person Sergi Juanola; 05.07.2011
comment
Вы также можете инициировать извлечение производственного репозитория из своего ящика разработчика. Итак, вы отправляете свой код в центральное репо, затем ssh к машине разработчика, cd к корню документа и git pull. Вы даже можете настроить его как хук после коммита (возможно, посмотреть, называется ли зафиксированная ветка dev или что-то в этом роде). - person Dan Ray; 05.07.2011