tp6+webhook 实现自动部署

1.安装git

yum install git -y

2.创建linux用户

//创建普通用户
adduser [创建的用户名] 
 
//修改密码
passwd  [创建的用户名]
//此处输入两遍密码
 
//编辑/etc/sudoers
vim /etc/sudoers
 

 配置完成后执行如下命令

//赋予创建的用户root权限
usermod -g root [上面创建的用户]
 
//切换到创建的用户名
su [创建的用户名]

注意:以下操作皆是在上面创建的用户下操作 

3.配置git公钥

//生成公钥回车三次 详情参考gitee帮助中心
ssh-keygen -t rsa -C "你的git邮箱号"
 
 
//查看公钥
cat ~/.ssh/id_rsa.pub
//将下面一行看到的公钥选中复制下来

部署如下图

公钥添加完成后再终端执行

ssh -T git@gitee.com

4.配置git全局用户名和邮箱以及密码

//配置全局用户名
git config --global user.name "你的用户名"
//配置全局邮箱
git config --global user.email"你的邮箱"
//配置全局密码
git config --global user.password"你的密码"
//生成本地文件用于记录用户名和密码
git config --global credential.helper store

5.配置weebhook

 6.配置php的FPM文件位置在 cd www/server/php/80/etc/ 到此目录下 执行 vim php-fpm.conf

修改如下的user 为你创建的用户

执行git的语句需要如下条件 1.root权限的用户,2.可配置全局git账号执行git指令时就无需输入账号密码3.我们下面用到的shell_exec()函数就是默认这里的user用户

7.安装tp6 框架写自动拉取的脚本

邮箱Email.php控制器

先安装邮箱的依赖环境执行 composer require phpmailer/phpmailer 安装依赖环境

<?php
/**
 * Created by PhpStorm
 * User: lingm
 * Date: 2022/9/23
 * Time: 下午 3:13
 * Atom:现在的努力是为了小时候吹过的NB
 */
namespace app\\controller;
// 引入composer依赖
use PHPMailer\\PHPMailer\\Exception;
use PHPMailer\\PHPMailer\\PHPMailer;
use PHPMailer\\PHPMailer\\SMTP;
 
class Email
{
    /*
     * SMTP配置
     * */
    private $smtp_host = 'smtp.qq.com';//SMTP服务器地址
    private $smtp_from = '小白--开发管理媛';//发送者
    private $smtp_username = '';//邮箱账号
    private $smtp_password = '';//邮箱IMAP/SMTP服务密码
 
    private $smtp_port = '465';//端口号
 
    /**
     * 发送邮件对象
     * @param $addresses
     * @param $subject
     * @param $body
     * @return PHPMailer
     * @throws Exception
     */
    public function obtainEmailSender(array $addresses, $subject, $body)
    {
        $mailSender = new PHPMailer(true);
        $mailSender->CharSet = 'UTF-8';
 
        //Server settings
        $mailSender->SMTPDebug = SMTP::DEBUG_SERVER;                       // Enable verbose debug output
        $mailSender->isSMTP();                                             // Send using SMTP
        $mailSender->Host = $this->smtp_host;                              // Set the SMTP server to send through
        $mailSender->SMTPAuth = true;                                      // Enable SMTP authentication
        $mailSender->Username = $this->smtp_username;                      // SMTP username
        $mailSender->Password = $this->smtp_password;                      // SMTP password
        $mailSender->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;             // Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` also accepted
        $mailSender->Port = $this->smtp_port;                              // TCP port to connect to
 
        //Recipients
        $mailSender->setFrom($this->smtp_username, $this->smtp_from);
        foreach ($addresses as $index => $address) {
            $mailSender->addAddress($address);                             // Name is optional
        }
        // Content
        $mailSender->isHTML(true);                                  // Set email format to HTML
        $mailSender->Subject = $subject;
        $mailSender->Body = $body;
        //返回邮件对象
        return $mailSender;
    }
}

2.自动化部署控制器Test.php

<?php
/**
 * Created by PhpStorm
 * User: lingm
 * Date: 2022/9/23
 * Time: 下午 4:25
 * Atom:现在的努力是为了小时候吹过的NB
 */
namespace app\\controller;
use app\\controller\\Email;
class Test{
    public function index(){
        // 获取请求参数
        $headers = getallheaders();
        //获取webhook传递过来的数据进行数据转换
        $body = json_decode(file_get_contents("php://input"), true);
        // 请求密码
        $password = 'webhook配置的密码';
        // 验证提交分支是否为master
        if (!isset($body['ref']) || $body['ref'] !== 'refs/heads/master') {
            return error("非主分支". $body);
        }
        // 验证提交密码是否正确
        if (!isset($body['password']) || $body['password'] !== $password) {
           return error("密码错误");
        }
        $command = " cd /www/wwwroot/xnasa.cn/ && git pull origin master 2>&1";
        //执行linux命令
        $res = shell_exec($command);
        // 发送邮件
        $addresses = [
            $body['sender']['email'],// 将邮件发送给发送者
            $body['repository']['owner']['email']// 将邮件发送给仓库所有者
        ];
        // 去除重复的内容
        $addresses = array_unique($addresses);
        try {
            // 更新说明
            $title = '部署成功通知';
            // 构造邮件内容
            $message = $body['head_commit']['message'];// 提交信息
            $datetime = date('Y-m-d H:i:s', $body['timestamp'] / 1000);// 时间
            $pusher = $body['pusher']['name'];// 提交人
            $name = $body['project']['name'];// 项目名
            $path = $body['project']['path'];// 路径
            $content = <<<HTML
                <html>
                <body>
                    <h2>{$body['project']['name']}已部署成功</h2>
                    <p>
                    描述:<span style="font-size: 16px; color: cadetblue">$message</span> <br>
                    时间:<span style="font-size: 16px; color: red">$datetime</span> <br>
                    提交人:<span style="font-size: 16px; color: cadetblue">$pusher</span> <br>
                    项目名称:<span style="font-size: 16px; color: cadetblue">$name</span> <br> 
                    项目路径:<span style="font-size: 16px; color: cadetblue">$path</span> <br>
                    git命令:<span style="font-size: 16px; color: cadetblue">$res</span>
                    </p>
                </body>
                </html>
                HTML;
 
            // 发送邮件
            $emailSender = (new Email())->obtainEmailSender($addresses, $title, $content);
            $emailSender->send();
            // 返回结果
            return success("邮件发送成功,执行结果:".$res,$res);
        } catch (\\PHPMailer\\PHPMailer\\Exception $e) {
            return error("邮件发送失败,执行结果:".$res.",\\n邮件日志:".$e);
        }
    }
}

如果这里使用 exec,shell_exec,system等函数报错需要修改php.ini文件 的 disable_functions =

将此选项中的 exec,shell_exec,system 找到给删掉 重启php即可

将上述的文件提交到git以后,拉取到服务器,之后随便修改一些地方进行测试提交推送到gitee

提交完以后等待gitee响应完成后在webhook就可以看到如下

 上面就是提交代码拉取的记录

详情内容如下,也可以看自己的邮箱

我这里没有改动文件提交所以这里是没有拉取到,每次gitee仓库提交后,webhook就会去请求上面的接口,没有新文件改动就不获取.我这里是自己重新请求的

以上自动化部署的脚本就完成了.

坑点:php的shell_exec()等函数是被禁用的需要手动开启,其次执行shell_exec()函数默认用户设置的是你www下的目录,所以会执行拉取失败,我们需要手动创建个用户,再去赋予root权限,配置git.

本站文章资源均来源自网络,除非特别声明,否则均不代表站方观点,并仅供查阅,不作为任何参考依据!
如有侵权请及时跟我们联系,本站将及时删除!
如遇版权问题,请查看 本站版权声明
THE END
分享
二维码
海报
tp6+webhook 实现自动部署
6.配置php的FPM文件位置在 cd www/server/php/80/etc/ 到此目录下 执行 vim php-fpm.conf
<<上一篇
下一篇>>