当我从任何本地计算机推送到github项目时,我希望我的远程服务器自动拉(它是一个php网站项目)
我在google和youtube上搜索过,但是我花了一整天时间才发现这是怎么回事。
在我的http://xxx.xxx.xxx.xxx/website/
中,有.git
个文件夹和github.php
文件部署
github.php
:
<?php
`git pull origin master`;
`touch test.txt`;
如果我从终端执行./github.php
,那么&#34;脚本&#34;效果很好。拉动也有效。
如果我从浏览器输入网址http://xxx.xxx.xxx.xxx/website/github.php
,则拉不起作用,但会创建test.txt
。
如果我从任何本地计算机推送提交,则远程服务器不会自动提取并且test.txt
文件未创建;
在我的远程服务器中,权限为:
for .git目录:drwxrwxrwx 8 toji toji 4096 Jun 14 13:31(-R)
for github.php:-rwxrwxrwx 1 toji toji 51 Jun 14 13:28
在我的github帐户中,我添加了一个webhook服务:
有效载荷网址为:http://xxx.xxx.xxx.xxx/website/github.php
请帮我确定问题的根源。
答案 0 :(得分:0)
我不认为你的PHP是有效的,因为你需要使用像exec()这样的东西来在php中使用git ...我几天前遇到了同样的问题,发现很少的工具来帮助从Github部署你的代码或者Gitlab所以我创建了Deepl.io来处理Web-Hooks并调用脚本来部署在你自己的服务器上。 这处理从github或gitlab发送的JSON,可用于多个存储库和分支等。您可以在收到拉取通知后使用自己的PHP或shell脚本,并在每次部署后向您发送状态电子邮件... 看看:http://deepl.io
实际执行的shell脚本(由php调用)如下所示;
#!/bin/sh
TRAGET="/path/to/target/folder"
LOG="/path/to/your/log/file.log"
NOW=$(date +"%Y-%m-%d-%H%M%S")
# Start Sctipt
echo "
SCRIPT START: $NOW" >> $LOG
cd $TRAGET >> $LOG
# checkout correct branch
git checkout master >> $LOG
# clear untracked files
git clean -df >> $LOG
# revert local changes
git checkout -- . >> $LOG
# pulling new stuff
git pull >> $LOG
echo "SCRIPT END.
" >> $LOG