我有一个GIT仓库,我使用PHP脚本从主分支和服务器上更新文件。这是一个很简单的解决方案,只是为了测试一下。我想在github上添加一个webhook,以便在成功推送后发送回调,以便我可以从这个repo中拉。
脚本双向运行
- from命令行
- 从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";
}
我怎么能解决这个问题?
sudo -u www-data php deploy.php
显示www-data用户没有在github上注册ssh密钥,无法执行pull。我不能切换到www-data用户,所以我生成他的密钥没有切换到它,就像我运行脚本sudo -u www-data ssh-keygen -t rsa
一样。在github上注册他的密钥后,它就像一个魅力。
也是专业提示!Shell_exec()不显示当我在命令行中作为另一个用户运行脚本时可见的所有输出。这真的很令人困惑,花了我很多时间来找出错误在哪里。