配置环境
配置PHP,允许exec脚本指令- 需求:由于我们使用的是 PHP 开发的 webhook 回调操作,所以这里需要安装 PHP 模块- 配置:需要对
PHP
的php.ini
文件进行更改,删除disable_functions
下的exec
和shell_exec
,这样才能在webhooks.php
文件中,执行脚本命令。如下图:
创建公钥
开启WWW用户在
/etc/passwd
文件定位到www
那一行把sbin/nologin
改为bin/bash
,如下图:生成公钥因为我们已经开始了
www
用户的登录权限,那么在生成公钥之前,需要切换到www
账户下- 切换命令:su www
- 生成公钥命令:ssh-keygen -t rsa -C "[email protected]"
默认回车即可- 查看公钥:cat ~/.ssh/id_rsa.pub
其他账户下不可见,只有切换到www
用户才可见,如下图:> ps:博主在搭建>> Git>
> 服务的时候已经创建了,所以这里不需要生成公钥命令。如没有搭建>> Git>
> 服务请先阅读博主的另一篇博客 Linux系统上搭建Git服务配置公钥- Gitee上配置:
设置/SSH公钥
然后把cat ~/.ssh/id_rsa.pub
指令查看的公钥添加进去,如下图:- GitHub上配置:settings/SSH and GPG keys
然后把cat ~/.ssh/id_rsa.pub
指令查看的公钥添加进去,如下图:> 有了这个公钥的配置,我们通过 >> webhooks.php>
> 中的脚本指令就可以自动的拉取代码了测试否连接成功-
Gitee
测试:ssh -T [email protected]
如出现以下欢迎信息, 说明连接成功, 进一步证明上面的配置正确. 否则, 请仔细检查上面的步骤.Hi xxx! You've successfully authenticated, but GITEE.COM does not provide shell access.
-GitHub
测试:ssh -T [email protected]
如出现以下欢迎信息, 说明连接成功, 进一步证明上面的配置正确. 否则, 请仔细检查上面的步骤.Hi xxx! You've successfully authenticated, but GitHub does not provide shell access.
配置Webhooks
创建webhooks.php(回调脚本)文件在
public
目录下新建一个webhooks_emin.php
(回调文件),如下图:该文件完整代码如下:<?php/*** Git webhooks 自动部署脚本* 地址:https://github.com/fuzhengwei/guide-webhooks/settings/hooks*/// 接收post参数$requestBody = file_get_contents("php://input");if (empty($requestBody)) { exit('data null!');}// Content type = application/json$content = json_decode($requestBody, true);// 验证 Webhooks 配置的 Secret,也可以不验证if (empty($content['password']) || $content['password'] != '123456') { exit('password error');}// 项目存放物理路径$path = "/www/wwwroot/new_blogs";// 判断需要下拉的分支上是否有提交,我们这里的分支名称为 masterif ($content['ref'] === 'refs/heads/master') { // 执行脚本 git pull,拉取分支最新代码 $res = shell_exec("cd {$path} && git pull origin master 2>&1"); // 当前为www用户 // 记录日志 ($content 返回的是一整个对象,可以按需获取里面的内容,写入日志) $res_log = '------------------------->' . PHP_EOL; $res_log .= '用户 ' . $content['pusher']['name'] . ' 于 ' . time() . ' 向项目【' . $content['repository']['name'] . '】分支【' . $content['ref'] . '】PUSH ' . $content['commits'][0]['message'] . PHP_EOL; $res_log .= $res . PHP_EOL; // 需要写入文件的路径地址 $newPath = "emin_git_log.txt"; // 文件头部BOM必带,否则写入中文内容会乱码 $bom = chr(0xEF).chr(0xBB).chr(0xBF) . $res_log; // 内容拼接 $str = file_exists($newPath) ? $bom . file_get_contents($newPath) : $bom; // 写入日志文件 file_put_contents($newPath, $str);}echo 'done';
这里的回调脚本文件是配置
Gitee
,如果是要配置
GitHub
的回调脚本文件要注意其中的分支名称可能是
main
,那就需要做响应的调整,其他的并无区别;
配置Webhooks- Gitee上配置,如下图:- GitHub上配置,如下图:> ps:这里需要注意的就是>
> url>
> 为新建的回调脚本文件地址,推荐设置密码
特别注意
- Gitee的自动请求,如下图:
- GitHub的自动请求,如下图:
ps:其实GitHub也是配置好了的,但是因为国内网络问题,请求很容易就超时;
其次拉取代码的目录如果没设置好权限,那么开启的www
用户是拉取不到代码的
暴力解决方案:chmod 777 目录名
博主建议解决方案:修改该目录的所属者为
www
,指令为:
chown -R www 目录名
,
-R
的作用是递归作用于目录下的所有文件(包括子目录)
特别感谢
参考博客:Linux 配置gitee
版权归原作者 ゛人生若只如初见° 所有, 如有侵权,请联系我们删除。