OS - Ubuntu 14.04
我正在使用GIT webhooks进行部署。
我已经将部署密钥添加到git repo,现在我想在本地repo发生推送时触发git pull origin master
命令。
test.php
文件:
<?php
//echo "THis is a test file on a test repo for testing the deploy functionality using github webhooks!!!!";
echo exec('whoami');
echo exec('sh -x /var/www/proj/test/git.sh');
?>
这是git.sh
shell文件:
#!/bin/bash
cd /var/www/proj-dir/test
git pull origin master
当我使用php test.php
在终端上运行此命令时,我得到了预期的正确结果:
ubuntu From github.com:repo/test
* branch master -> FETCH_HEAD
Already up-to-date.
ubuntu
for whoami
,后跟git pull
输出。
现在这是问题,当我通过浏览器调用相同的http://example.com/test.php
时,它显示用户或whoami
输出作为www-data
,这是apache用户,但我尝试更新php文件的执行权限并将用户更改为www-data
,但没有工作。
检查apache日志,当我通过浏览器执行时,我得到一个权限错误
Please make sure you have the correct access rights and the repository exists. + cd /var/www/proj/deploy-test + git pull origin master
主机密钥验证失败。致命:无法从远程存储库读取。请确保您有正确的访问权限并且存储库存在。
我需要做什么更新,使文件通过浏览器请求工作?
如果我需要更新sudoers文件,应该更新什么?
我将.ssh
键添加到var/www/
目录中,因为这是apache用户的主目录。但是我仍然得到
git pull origin master
error: cannot open .git/FETCH_HEAD: Permission denied
我还为www-data用户添加了一行,以便能够执行sh文件。
www-data ALL=(anthony) NOPASSWD: /var/www/mysite/vendor/tmd/auto-git-pull/scripts/git-pull.sh
参考这里仍然没有运气
将.git文件夹的权限更新为www-data用户
sudo chown www-data:www-data /var/www/proj/test/.git
这似乎不是PHP问题,而是git配置问题。ubuntu
的Git配置是正确的,www-data
的Git配置是错误的。
你可以尝试让PHP像ubuntu一样运行一些东西,但这似乎不是最简单也不正确的。我建议为www-data
用户正确配置git。
我怀疑你可以通过在终端上运行来重现这个问题:
# become www-data user
sudo su www-data
# actions from your git.sh file
cd /var/www/proj-dir/test
git pull origin master
在验证您确实有一个复制场景之后,您可以尝试为www-data
用户解决问题。
作为任何一个用户运行git config --list
的输出都有可能存在差异。有关这方面的更多帮助,请参阅https://git-scm.com/book/en/Getting-Started-First-Time-Git-Setup
也可能是文件权限/所有权的差异导致了问题。为了排除这种情况,我建议您使用git clone ...
作为用户www-data
在文件系统的其他路径中创建一个新的克隆和工作副本。然后再次查看git pull
现在是否按预期工作。
你可以考虑给www-data
自己的工作副本(不管权限问题)。这还可以防止必须处理工作副本中可能导致合并问题的未提交更改。从PHP/git.sh
自动/无人值守地处理这些可能会很麻烦。
建议的工作流程将是:在你当前的工作目录中开发为ubuntu
, add
/commit
/push
你的更改。然后让PHP做pull
作为自己(作为www-data
)。