同步GitHub仓库中的大学小组项目更改到个人服务器

4
我正在尝试为一个使用PHP构建的大学小组项目设置git开发工作流程。在过去的一周里,我一直在帮助团队中的每个成员配置他们的电脑,以便我们能够协作提交代码到主仓库。现在,每个开发人员都能够成功地在他们的机器和GitHub托管的远程仓库之间同步代码,无论他们使用哪个操作系统。

enter image description here

设置我们的工作流程的下一步是获取一个Apache服务器从GitHub存储库中拉取我们的更改。这样,即使团队中的非编码人员也可以实时查看更改并测试我们的系统。

enter image description here

我发现GitHub提供了一个很酷的功能,叫做git hooks。这应该可以让我们轻松地将这个功能集成到我们的工作流程中。我已经在服务器上安装了Git,设置了与GitHub的SSH密钥,并创建了一个新的hook。
然后,我将这段PHP代码添加到hook调用的文件中:
<?php 
    $output = shell_exec('git pull origin master 2>&1');
    echo "<pre>$output</pre>";
?>

现在,如果我从SSH终端会话中调用此代码,使用php git_pull_post_hook.php,最新更改(来自团队中的任何开发人员)将成功同步。但是,每当GitHub挂钩或其他人通过HTTP访问php文件时,什么也不会发生。
经过数小时的谷歌搜索,每个问题都导致了另一个问题。我已经按照其他线程建议更改了文件所有者权限,但现在这是我从脚本输出(通过HTTP)得到的错误:
Could not create directory '/var/www/.ssh'.
Host key verification failed.
fatal: The remote end hung up unexpectedly

我猜测www-data没有足够的权限访问我们服务器根目录中的SSH密钥,这就是导致所有错误的原因...但实际上,/var/www/.ssh目录确实存在于服务器上,所以我不明白出了什么问题。
遗憾的是,小组中没有其他人知道这种类型的事情,也没有任何好的设置指南。任何帮助/提示将非常感激!
更新:
VonC发布的指南似乎是我们需要做的合适解决方案。我尝试删除.ssh文件夹并按照该指南中的每个步骤精确执行,但现在我们得到以下错误,指出存在权限错误:No directory, logging in with HOME=/
root@xxx:~# mkdir /var/www/.ssh
root@xxx:~# chmod 0700 /var/www/.ssh
root@xxx:~# chown -R www-data:www-data /var/www/.ssh
root@xxx:~# su - www-data -c "ssh-keygen -t rsa"
No directory, logging in with HOME=/
Generating public/private rsa key pair.
Enter file in which to save the key (/var/www/.ssh/id_rsa): 
Could not stat /var/www/.ssh: Permission denied
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
open /var/www/.ssh/id_rsa failed: Permission denied.
Saving the key failed: /var/www/.ssh/id_rsa.
root@xxx:~# chmod 0600 /var/www/.ssh/id_rsa
chmod: cannot access `/var/www/.ssh/id_rsa': No such file or directory
root@xxx:~# chmod 0600 /var/www/.ssh/id_rsa.pub
chmod: cannot access `/var/www/.ssh/id_rsa.pub': No such file or directory
1个回答

1
作为本指南的一部分,您可能错过了/var/www/.ssh/known_hosts文件。
touch /var/www/.ssh/known_hosts
chown www-data:www-data /var/www/.ssh/known_hosts
sudo -u www-data ssh github.com

这个webjay/gh_hook.php中提到了它,但你可以在this gist中找到一个更简单的版本。
<?php

// Use in the "Post-Receive URLs" section of your GitHub repo.

if ( $_POST['payload'] ) {
shell_exec( 'cd /srv/www/git-repo/ && git reset --hard HEAD && git pull' );
}

?>hi

嗨VonC,感谢您的回答。这个指南确实对我们有所帮助。然而,在执行指南中的命令时,我们仍然面临权限错误。我已经在我的问题中更新了更多信息。如果您能够继续提供帮助,我们将不胜感激,因为您似乎真的很懂这方面的知识。谢谢。 - Joel Murphy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接