使用 Webhooks 主动部署代码
设置情况[*] 设置PHP,允许exec脚本指令
[*] 需求:由于我们使用的是 PHP 开发的 webhook 回调操作,所以这里需要安装 PHP 模块
[*] 设置:需要对PHP的php.ini文件进行更改,删除disable_functions下的exec和shell_exec,这样才气在webhooks.php 文件中,执行脚本命令。如下图:
https://img-blog.csdnimg.cn/img_convert/054b9a8b5263c33c1c6edaf63f869b4c.png
创建公钥
[*] 开启WWW用户
在/etc/passwd文件定位到www那一行把sbin/nologin 改为 bin/bash,如下图:
https://img-blog.csdnimg.cn/img_convert/649879c83cbf4826d8e24f9758df224d.png
[*] 天生公钥
因为我们已经开始了 www用户的登录权限,那么在天生公钥之前,需要切换到www 账户下
[*] 切换命令:su www
[*] 天生公钥命令:ssh-keygen -t rsa -C "1761668306@qq.com"默认回车即可
[*] 查看公钥:cat ~/.ssh/id_rsa.pub 其他账户下不可见,只有切换到 www用户才可见,如下图:
https://img-blog.csdnimg.cn/img_convert/3dde49afbff2da795a31c7c90041fada.png
ps:博主在搭建Git服务的时候已经创建了,所以这里不需要天生公钥命令。如没有搭建Git服务请先阅读博主的另一篇博客 Linux系统上搭建Git服务
[*] 设置公钥
[*] Gitee上设置:设置/SSH公钥然后把cat ~/.ssh/id_rsa.pub指令查看的公钥添加进去,如下图:
https://img-blog.csdnimg.cn/img_convert/c21b5a05d19e71f93d19b199b97dd80a.png
[*] GitHub上设置:settings/SSH and GPG keys然后把cat ~/.ssh/id_rsa.pub指令查看的公钥添加进去,如下图:
https://img-blog.csdnimg.cn/img_convert/aaf5adeb016fb1f6fe68c00d87d846ae.png
有了这个公钥的设置,我们通过 webhooks.php 中的脚本指令就可以主动的拉代替码了
[*] 测试否毗连乐成
[*]Gitee测试:
ssh -T git@gitee.com
如出现以下欢迎信息, 阐明毗连乐成, 进一步证明上面的设置精确. 否则, 请细致检查上面的步骤.
Hi xxx! You've successfully authenticated, but GITEE.COM does not provide shell access.
[*]GitHub测试:
ssh -T git@github.com
如出现以下欢迎信息, 阐明毗连乐成, 进一步证明上面的设置精确. 否则, 请细致检查上面的步骤.
Hi xxx! You've successfully authenticated, but GitHub does not provide shell access.
设置Webhooks
[*] 创建webhooks.php(回调脚本)文件
在public目录下新建一个webhooks_emin.php(回调文件),如下图:
https://img-blog.csdnimg.cn/img_convert/b96acf90ed85035c29df2ca70add0457.png
该文件完整代码如下:
<?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";
// 判断需要下拉的分支上是否有提交,我们这里的分支名称为 master
if ($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']['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上设置,如下图:
https://img-blog.csdnimg.cn/img_convert/90c87d970f667066c23d7c53058ca61b.png
[*] GitHub上设置,如下图:
https://img-blog.csdnimg.cn/img_convert/9db71d54ceb59c6463d914076b7f9fc9.png
ps:这里需要注意的就是url为新建的回调脚本文件地点,保举设置密码
特殊注意
[*] Gitee的主动请求,如下图:
https://img-blog.csdnimg.cn/img_convert/3d9b9a642e42fdd240898499efe42e75.png
[*] GitHub的主动请求,如下图:
https://img-blog.csdnimg.cn/img_convert/55cca889ad9a396103cd6997c5381a2e.png
ps:其实GitHub也是设置好了的,但是因为国内网络题目,请求很容易就超时;
其次拉代替码的目录假如没设置好权限,那么开启的www用户是拉取不到代码的
暴力办理方案:chmod 777 目录名
博主建议办理方案:修改该目录的所属者为 www ,指令为:chown -R www 目录名,-R的作用是递归作用于目录下的全部文件(包括子目录)
特殊感谢
参考博客:Linux 设置gitee
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]