WEBHOOK是一种系统通知的形式,在达到特定条件时系统自动触发网络请求。 可以理解为服务端系统中的跨设备回调函数。
手头有很多个项目在同时运作维护,核心的框架也不断在升级和修复。 刚开始的时候项目很少,基本上就是通过sublimetext的SFTP直接手动上传,现在随着需要维护的项目增多,每次做更新和上传的时候都会出现版本间的不同步,部署的繁琐,不能做到增量更新,更新效率比较差。
现在研究一下使用webhook来做到自动部署。目前的代码库托管在gitee码云。
注!我这里的主要需求主要是核心库分布式的增量更新,所以主要是包更新,一次更新通知多个服务器进行同步,不是一个整站代码的更新,当然整站上传也可以采用这样的方式,有的时候使用ftp来处理网站更新也不坏。
1- 在gitee项目页面可以看到webhook设置功能。 打开项目-> 设置 -> WebHooks -> 添加
2- 添加一个自己本地接收hook通知的链接、这里对应的链接要完成后续的处理。(强烈建议要使用鉴权) 如: https://domain.cn/hook.php
3- 编写服务端消息解析、文件部署的功能
代码语言:javascript复制<?php
$json = file_get_contents("php://input");
$data = json_decode($json,true);
$pass = $data['password']; // 如果需要检验密码
if (isset($data['ref']) && $data['total_commits_count']>0) {
$res = shell_exec("cd /home/www/honli && git pull https://username:passwod@gitee.com/project.git 2<&1 ");
$record = [ // 更新详情
'username'=>$data['user_name'],
'time'=>time(true),
'time_'=>date('Y-m-d H:i:s'),
'project'=>$data['repository']['name'],
'ref'=>$data['ref'],
'commitCount'=>$data['total_commits_count'],
'message'=>$data['commits']['message']
];
// 在这个地方将部署记录写入日志或数据库
}
?>
4- 服务端本地安装git,配置本地更新功能 本机是CentOS7.2 64 centos7搭建git及安装使用 安装完git之后,拉取或配置服务器端的仓库,后面使用shell来发起仓库的更新即可
php因为安全原因会出现shell_exec被禁用的问题,解决的方案是在php.ini中取消禁用
注意 1 添加文件夹的写入权限 修改git文件的权限为 www:www 2 注意不要使用FTP上传覆盖库中文件、这样会导致库冲突。这里面应该把库文件和业务文件分离开。 (冲突自救)
相关参考: php与Git下基于webhook的自动化部署 配置码云git自动更新的webhook