Ответ 1
Существует три сценария git -ftp, которые позволяют "нажимать" репозиторий git на FTP-сервер.
Мне нужно найти способ развертывания проекта PHP, хранящегося в репозитории git, на промежуточном и производственном сервере, в не установлен git. Скрипты, которые я нашел до сих пор (т.е. Capistrano), требуют git на целевом сервере.
К сожалению, мой хост не разрешает это, и единственный способ до сих пор - через стандартный FTP, с которым я продолжаю пропускать файлы. Это делает непрофессиональный взгляд.
Я хотел бы иметь возможность развертывать из своего локального репозитория git, который будет проверять папку .git на целевой странице, чтобы увидеть, какая версия там, затем заставить целевой сервер выполнить резервное копирование текущей версии и затем перезаписать это с нажатием только измененных файлов.
Предпочтительно что-то в PHP с веб-интерфейсом.
Не спрашиваю много я;)
Кто-нибудь там видел/видел что-нибудь подобное?
Существует три сценария git -ftp, которые позволяют "нажимать" репозиторий git на FTP-сервер.
Возможно, вы сможете использовать что-то вроде Fuse для "монтирования" производственного сервера как локального диска, а затем, если ваша копия git связана с локальной операцией. Альтернативно, rsync.
Здесь вызов инструмента Dandelion, который также делает это. Из того, что я вижу, он очень похож на git -ftp, но он также поддерживает sftp и Amazon S3, что удобно, если вы не хотите менять инструмент развертывания только потому, что вы меняете сервер. Он поставляется как рубиновый камень, поэтому его очень легко установить и начать.
Я сделал что-то подобное, используя 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, метод auth может измениться. Я также полагаю, что ключи находятся в '/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, я смог развернуть новый код на несколько серверов автоматически и одновременно.
Я использую Beanstalkapp.com, что отлично. Вы можете развернуть через FTP или SFTP.