时间:2021-07-01 10:21:17 帮助过:12人阅读
以私人仓库为例:
设置webhooks访问路径:
以我自己项目为例 ,框架使用的是tp6。在public/下创建一个名为basic.php的文件,目的在于当代码推送至服务器上时,github可以访问到并且可以执行的一个文件。
该文件用于执行shell 命令,在触发该链接时自动执行该文件里的命令,从而实现git 自动拉取。
如上图所示,当出现绿色✅时表示此链接被访问到,当出现红色⚠️标志则表示文件没有被访问。以此排查链接问题还是代码问题。
[x] 至此Github方面完成。
下面展示一些 内联代码片
。
- <?php
- //git webhook 自动部署脚本
- $requestBody = file_get_contents("php://input"); //接收数据
- if (empty($requestBody)) { //判断数据是不是空
- die('send fail');
- }
- $content = json_decode($requestBody, true); //数据转换
- //若是主分支且提交数大于0
- if ($content['ref']=='refs/heads/main') {
- //或将命令加入 shell里,看个人需求 git reset --hard origin/master && git clean -f
- $res = shell_exec('cd /www/wwwroot/xxxx/ && echo `sudo git pull` >> b.log');//PHP函数执行git命令
- $res_log = '-------------------------'.PHP_EOL;
- $res_log .= ' 在' . date('Y-m-d H:i:s') . '向' . $content['repository']['name'] . '项目的' . $content['ref'] . '分支push'.$res;
- file_put_contents("git-webhook.txt", $res_log, FILE_APPEND);//将每次拉取信息追加写入到日志里
- }
- ?>
[x] 至此命令 php shell部分已完成,可根据不同项目需求自行调试。
处理方法 将php.ini 里的shell_exec删除,重启服务即可。
一般不会出现,当出现权限报错,建议先检查一下文件目录是否为你设置的权限组.如果不是,可以使用一下命令修改文件权限组
- //以www用户组为例
- chown -R www:www file/
步步排查,当确定前面流程没有问题 而代码依然没有自动拉取时.手动执行以上shell 如果代码成功拉取,可以排除shell问题。打开日志记录,如果日志记录里的内容为空,可以尝试 使用将老版本替换为新版本的方法
是因为权限秘钥出现了问题,在www权限组里没有创建连接github的公钥
这里作者使用的是此方法解决,如果有大佬有其他解决方案,欢迎私信或评论区留言。
vim 打开 /etc/sudoers 在root下添加一行 www 执行sudo 权限免密码
以上就是关于web hooks服务器自动拉取代码php thinkphp6的详细内容,更多请关注gxlcms其它相关文章!