使用git webhook自动部署代码(PHP,HTML/JS)

2023-02-15 14:49:02 浏览数 (1)

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

0 人点赞