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.
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。