как автоматически настроить автодеплой на сервер из git?

есть локальные репозитории девелоперов.
есть main репозиторий, куда все выливают.
есть production host.

новая фича вливается в development программистом.
примерно раз в день development сливается в testing (на testing host), где тестеры ее мучают.
примерно раз в неделю testing сливается в master на production host.

как сделать так, чтобы мержинг development ветки с testing веткой автоматом появлялся на testing host?
как сделать так, чтобы мержинг testing ветки с master веткой автоматом появлялся на production host?

сейчас нужно после мержинга делать push, лезть по ssh на testing host и там делать pull ... это так утомляет (особенно когда major fix и нужно "вылить быстренько" а то тестеры ждут, т.к. все сломалось :/)

есть идея написать крон скрипт, который будет с определенной периодичность делать pull на хостинг серверах - это правильный путь?

З.Ы. post-update hook думаю не совсем подходит, т.к. он выполняется на git host машине (т.е. на хосте где просто лежат репозитории ... это не продакшен и не тестинг хосты)

1 ответов


1. нужно настроить доступ по SSH без пароля с сервера, где лежит репозиторий на production host (сгенерить ключ для пользователя gitosis, записать его в authorized_keys на production host)
2. в post-update хук написать что-то типа:


#!/bin/sh

REMOTE_HOST='myproj.com'
REMOTE_USER='user1'

echo "start deploy on $REMOTE_HOST"
echo

ssh $REMOTE_USER@$REMOTE_HOST "/var/www/$REMOTE_HOST/git-pull-master.sh"
 

3. на production host создать такой скриптик:

#! /bin/sh

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/bin:/usr/bin:/usr/lib:/usr/local/bin
COMMAND=git
PROJECT_NAME="myproj"
PROJECT_DIR=/var/www/proj.com
PROJECT_ENV="master"

# Exit if the git is not installed
[ -x "/usr/bin/$COMMAND" ] || exit 0

#
# start pulling
#
echo "start $PROJECT_NAME $PROJECT_ENV pulling"
cd $PROJECT_DIR
git pull origin $PROJECT_ENV

:
 
4. вуаля. При пуше в origin репозиторий, гит будет запускать post-update, который будет по SSH запускать pull на produsction host

Посмотрите git-website-howto оно конечно не ваш случай, но мысли по поводу использования hook дам достаточно интересные