首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用git webhook自动部署代码(PHP,HTML/JS)

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

作者头像
雪碧君
发布2023-02-15 14:49:02
发布2023-02-15 14:49:02
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

WEBHOOK是一种系统通知的形式,在达到特定条件时系统自动触发网络请求。 可以理解为服务端系统中的跨设备回调函数。

手头有很多个项目在同时运作维护,核心的框架也不断在升级和修复。 刚开始的时候项目很少,基本上就是通过sublimetext的SFTP直接手动上传,现在随着需要维护的项目增多,每次做更新和上传的时候都会出现版本间的不同步,部署的繁琐,不能做到增量更新,更新效率比较差。

现在研究一下使用webhook来做到自动部署。目前的代码库托管在gitee码云。

注!我这里的主要需求主要是核心库分布式的增量更新,所以主要是包更新,一次更新通知多个服务器进行同步,不是一个整站代码的更新,当然整站上传也可以采用这样的方式,有的时候使用ftp来处理网站更新也不坏。

1- 在gitee项目页面可以看到webhook设置功能。 打开项目-> 设置 -> WebHooks -> 添加

2- 添加一个自己本地接收hook通知的链接、这里对应的链接要完成后续的处理。(强烈建议要使用鉴权) 如: https://domain.cn/hook.php

3- 编写服务端消息解析、文件部署的功能

代码语言:javascript
代码运行次数:0
运行
复制
<?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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-08-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档