Я сделал что-то подобное, используя ssh2 и php.
Сначала вам нужно клонировать репо на сервере.После клонирования вы можете выполнять git pull, checkout и т. Д. Из php, используя ssh2.самый практичный способ, который я нашел, это делать.
git fetch;
git reset --hard commit_hash;
для того, чтобы установить коммит на ожидаемый.
Выполнить команду php - ssh2 (предположим, у вас установлен ssh2), вы можете использовать этот метод.
public static function SSHCommmand($command,$user,$ip) {
$port = 22;
if (!function_exists("ssh2_connect"))
die("function ssh2_connect doesn't exist.");
$result['debug'] .= " -Connect- 1";
if (!($con = ssh2_connect($ip, $port, array('hostkey' => 'ssh-rsa')) )) {
die("unable to establish connection.");
} else {
// try to authenticate with username root, password secretpassword
if (!(ssh2_auth_pubkey_file($con, $user, '/home/' . $user . '/.ssh/deploy_rsa.pub', '/home/' . $user . '/.ssh/deploy_rsa'/* , 'secret' */))) {
dir("fail: unable to authenticate.");
} else {
// allright, we're in!
// execute a command
if (!($stream = ssh2_exec($con, $command))) {
die("fail: unable to execute command.");
} else {
// collect returning data from command
stream_set_blocking($stream, true);
$data = '';
while ($buf = fread($stream, 4096)) {
$data .= $buf;
}
fclose($stream);
return $data;
}
}
}
}
Я использую ключ ssh-rsa, метод аутентификации может измениться.Я также предполагаю, что ключи находятся в '/home/' . $user . '/.ssh/deploy_rsa.pub'
и '/home/' . $user . '/.ssh/deploy_rsa
.
Еще одна вещь, которую вы можете принять во внимание, это то, что для удаленного выполнения команды удаленного git, команда должна выглядеть следующим образом:
_GIT_PATH.' --git-dir='.$path.'/.git --work-tree='.$path.' '.$command;
где $path
- это верхний уровень рабочего дерева.
Благодаря использованию этого и Amazon Api я смог развернуть новый код на нескольких серверах автоматически и одновременно.