【发布时间】:2015-10-07 06:37:12
【问题描述】:
我有一个 GIT 存储库,我正在使用 PHP 脚本从主分支中提取并更新服务器上的文件。这是一个非常简单的解决方案,只是为了测试它。我想在 github 上添加一个 webhook 以在成功推送后发送回调,以便我可以从这个 repo 中提取。
脚本双向运行
- 从命令行
- 来自 HTTP 请求
不同之处在于,当我从 HTTP 运行它时,它不会拉取新的更改,只是显示它是最新的并且不会做任何事情,即使我 100% 确定 repo 中有新的更改.输出来自 GIT 命令,所以我确信它可以工作,并且 apache 具有运行该脚本文件和其中使用的命令的适当权限。
当我通过命令行(通过相同的脚本或只是清理 git 命令)运行它时,一切都很好,脚本会提取新的更改并显示标准的 GIT 输出。
PHP 代码:
echo "Pulling changes from master branch...\n";
$result = shell_exec('cd /var/git-test && git reset --hard HEAD && git pull');
if($result !== null){
echo $result;
}else{
echo $result;
echo "Error in Git pull comand";
}
我该如何解决这个问题?
【问题讨论】:
-
您是否尝试过使用 apache 用户手动运行脚本?
-
你怎么知道它“显示它是最新的”?
-
以防万一shell_exec应该被禁用的警告,打开它是不安全的。
-
问题已解决:Apache 用户“www-data”应该已经生成了自己的 ssh 密钥,以后可以使用 webhooks 对 github 上的拉取请求进行身份验证。
-
@Ôrel 是的,这有帮助,我通过运行
sudo -u www-data php deploy.php对其进行了测试,我发现它显示了一些 shell_exec() 没有返回的附加信息,这有点令人困惑. git pull 无法执行,因为 www-data 没有在 github 上注册他的 ssh 密钥。
标签: php git github pull autodeploy