微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

个人网站搭建 04——WebHooks 实现远程项目的自动部署

环境说明

  1. Github 或 Gitee 维护的网站代码支持 Webhooks);
    由于 Github 访问速度受限,易出现超时问题,我使用 Gitee 部署代码
  2. Linux 公网服务器(阿里云、腾讯云华为云等);
    服务器操作环境为 CentOS 7.6 64bit
  3. 远程服务器环境安装:git@1.8.3.1Nginx@1.20.1PHP@5.6

前期准备

  • 克隆项目代码文件夹,通过 Nginx 或宝塔面板建立可用的网站
  • 远程服务器的 PHP 代码是由 www 用户运行的,所以一切操作建立在 www 用户之上
  • 安装好 PHP 模块以后,还需要对 PHPPHP.ini 进行更改,删除 disable_functions 下的 execshell_exec,这样才能在 webhooks.PHP 文件中执行脚本命令
image-20220415171224798

生成和配置公钥

开启 www 用户

  • 命令:vim /etc/passwd

  • 配置:把 sbin/nologin 修改bin/bash

    shell

生成公钥

因为我们已经开始了 www 登录权限,那么在生成公钥之前,需要切换到 www 账户下,命令:su www

  • 切换用户su www
  • 生成公钥:ssh-keygen -t rsa -C "{email}" - 认回车即可
  • 查看公钥:cat ~/.ssh/id_rsa.pub - 其他账户下不可见,只有切换到 www 可见
shell

配置公钥(Gitee)

  • 地址:https://gitee.com/profile/sshkeys
  • 配置:把你通过 cat ~/.ssh/id_rsa.pub 查看到的公钥,配置到这里即可,如下:
image-20220415172215643
  • 有了这个公钥的配置,通过 webhooks.PHP 中的脚本指令就可以自动拉取代码

配置 Webhooks

从 Gitee 克隆下来的代码文件中,有一个名为 webhooks.PHP文件,它是用于处理 Gitee 回调时拉取 Gitee 对应代码库的脚本文件

webhooks.PHP 文件进行如下配置:

<?PHP
/**
 * Git webhooks 自动部署脚本
 * 地址:https://github.com/LiuPiPiPi/liupipipi.github.io/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 = "/home/www/Blog-Hexo/";

// 判断需要下拉的分支上是否有提交,我们这里的分支名称为 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'] . ' 于 ' . date('Y-m-d H:i:s') . ' 向项目【' . $content['repository']['name'] . '】分支【' . $content['ref'] . '】PUSH ' . $content['commits'][0]['message'] . PHP_EOL;
    $res_log .= $res . PHP_EOL;

    // 追加方式,写入日志文件
    // file_put_contents("git_webhook_log.txt", $res_log, FILE_APPEND);
}

// shell_exec("cd {$path} && git pull origin master 2>&1");

echo 'webhooks connect done!';

添加 Webhooks

在网站代码的 Gitee 管理页面,进入设置 -> Webhooks 添加 Webhooks 请求,URL 填写 webhooks.PHP 文件的远程地址。

image-20220415172835482

查看日志:

image-20220415173117393

到这里 Webhooks 回调函数自动部署就成功实现。Webhooks 也可以通过宝塔面板自动配置,详细操作见下方链接

宝塔面板自动配置 Webhooks 参考文章php宝塔面板webhook使用

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐