4

还没有弄清楚这一点..我已经看到了一些答案,但没有一个有帮助。

我正在尝试使用 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 的公钥和相同的结果。

4

3 回答 3

3

更改您的 PHP 以通过 sudo 运行 git

<?php `sudo git pull git@github.com:my-user/myrepo.git`; ?>

然后更改您的 suoders 以允许 git 由 apache 用户运行

apache ALL = NOPASSWD: /usr/bin/git
于 2012-10-26T07:50:49.887 回答
1

已经有 Git Wrappers 和库。也许您可以尝试其中之一: https ://github.com/kbjr/Git.php和/或http://www.gitphp.org/projects/gitphp/wiki

于 2012-10-25T20:44:31.710 回答
0

我是为开发站点执行此操作的——我不建议为 prd 站点执行此操作,尽管如果脚本不带参数,我想不出任何特别危险的地方。

我创建了一个执行 git pull 的 php 脚本。在网络浏览器中,我导航到该脚本,并且由设计者等推送的任何更改都会自动部署。 http://.../gitpullscript/gitpullscript.php

这通过创建 apache 用户拥有的 git checkout 来工作。您可以通过在属于 apache 用户(本例中为 www-data)的文档根目录之外的某个位置创建一个目录来执行此操作。然后一个 git clone 到那个目录,所以所有的文件都属于 www-data。之后将我想要的目录软链接到我的文档根目录中,以便可以通过网络浏览器访问它们。

www-data 不在 git 组中,并且存储库已设置为每个人都可以读取(但不能写入).. 因此 www-data 可以拉但不能推送

在项目层次结构中,我创建了一个目录来保存 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

于 2015-01-08T23:22:33.573 回答