还没有弄明白这一点..我已经看到了一些答案,但没有一个有帮助。
我正在尝试使用Github Webhooks让github在我的服务器上点击一个url并让服务器在命中时立即下拉新提交的项目。我有一个PHP脚本,包含以下内容:
<?php `git pull git@github.com:my-user/myrepo.git`; ?>
然而,点击时该脚本以用户apache
运行,所以我尝试了:
chown -R apache:apache .
并且仍然有权限被拒绝错误。
然后我尝试编辑sudoers文件并更改以下内容:
Host_Alias LOCAL=127.0.0.1
apache LOCAL=NOPASSWD: /var/www/html/git-hook.php
但仍然无效。
如何实现这一目标?如果我跑:
sudo php git-hook.php
它工作正常,所以php文件中的代码没有任何问题。我只想让它自动化。
有什么想法吗?
修改
我也忘了提。我甚至创建了一个文件夹/home/apache/.ssh
并复制了git pull over的公钥,结果相同。
答案 0 :(得分:3)
将您的PHP更改为通过sudo运行git
<?php `sudo git pull git@github.com:my-user/myrepo.git`; ?>
然后更改你的suoders以允许apit用户运行git
apache ALL = NOPASSWD: /usr/bin/git
答案 1 :(得分:1)
已经有Wrappers和库。也许你可以尝试其中一个: https://github.com/kbjr/Git.php和/或http://www.gitphp.org/projects/gitphp/wiki
答案 2 :(得分:0)
我为一个开发网站做了这个 - 我不建议这个prd网站,虽然我不能想到任何特别危险的它,只要脚本不采取参数..
我创建了一个执行git pull的php脚本。在Web浏览器中,我导航到该脚本,并自动部署由deisgners等推送的任何更改。
http://.../gitpullscript/gitpullscript.php
这可以通过创建apache用户拥有的git checkout来实现。您可以通过在文档根目录之外的某个位置创建属于apache用户的目录(在本例中为www-data)来完成此操作。然后将git克隆到该目录中,因此所有文件都属于www-data。然后将我想要的目录软链接到我的文档根目录中,以便可以通过Web浏览器访问它们。
www-data不在git组中,并且存储库已设置为每个人都可以读取(但不能写入)..因此,www-data可以拉动但不能推送
在项目heirarchy我创建了一个目录来保存gitpull脚本..我使用.htaccess来密码保护这个目录。
<?php exec('cd /var/www-data/projects/myrepo; git pull');
mkdir /var/www-data
sudo chown www-data-www-data
su www-data
mkdir /var/www-data/projects
cd /var/www-data/projects
git clone my-repo