Делается довольно легко. Особенно, если деплоить нужно только последний коммит из master
.
- Ставим на сервере git.
- Делаем clone своего репозитория. Лучше использовать URL только для чтения вроде
git://github.com/samdark/yiiframework_ru_cookbook.git
. - Берём код ниже, заменяем
/var/www/path/to/your/git/root
на путь к склонированному репозиторию. Вливаем в вебрут сервера. - Идём на страницу своего репозитория на github → admin → service hooks → WebHook URLs. Добавляем там URL залитого скрипта. Там же смотрим актуальные IP серверов github и сравниваем с теми, что в скрипте.
- Проверяем, что у вебсервера есть права писать в склонированные директории (в том числе и в скрытый
.git
). - Наслаждаемся автоматическим деплоем.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
function cidr_match($ip, $ranges) | |
{ | |
$ranges = (array)$ranges; | |
foreach($ranges as $range) { | |
list($subnet, $mask) = explode('/', $range); | |
if((ip2long($ip) & ~((1 << (32 - $mask)) - 1)) == ip2long($subnet)) { | |
return true; | |
} | |
} | |
return false; | |
} | |
$github_ips = array('207.97.227.253', '50.57.128.197', '108.171.174.178', '50.57.231.61'); | |
$github_cidrs = array('204.232.175.64/27', '192.30.252.0/22'); | |
if(in_array($_SERVER['REMOTE_ADDR'], $github_ips) || cidr_match($_SERVER['REMOTE_ADDR'], $github_cidrs)) { | |
$dir = '/var/www/path/to/your/git/root'; | |
exec("cd $dir && git pull 2>&1", $output); | |
echo $output; | |
} | |
else { | |
header('HTTP/1.1 404 Not Found'); | |
echo '404 Not Found.'; | |
exit; | |
} |