因为 php 脚本语言的特性,部署方式非常简单,直接上传就可以生效。但是这种方法却面临很多问题:集群部署,异常回退,备份等问题。利用 git hook 则可以解决这些问题。今天来用 码云 git 来做一个演示。
首先我们要将本地仓库和 git 服务器仓库进行关联和同步,在此不做赘述。
添加部署公钥
部署公钥允许以只读的方式访问项目,主要用于项目在生产服务器的部署上,免去HTTP方式每次操作都要输入密码和普通SSH方式担心不小心修改项目代码的麻烦。
部署公钥配置后的机器,只支持clone与pull等只读操作
首先我们要在项目部署服务器生成公钥
ssh-keygen -t rsa -C "xxxxx@xxxxx.com"
# Generating public/private rsa key pair...
# 三次回车即可生成 ssh key
查看你的 public key,并把他添加到码云仓库的部署公钥列表
cat ~/.ssh/id_rsa.pub
# ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6eNtGpNGwstc....
ssh -T git@gitee.com
# 检测是否添加完成
如出现类似下图提示则证明添加完成

在部署服务器关联该仓库
关联该仓库,并设置该仓库位 web 项目目录,并测试可以打开
添加通知地址

勾选 Old Format 则发送的 post 请求参数为普通格式,不勾选则为 json 格式。
编写脚本。
<?php
$data=json_decode($_POST['hook'],true);
if($data['password']!='xxxxxx'){
exit;
}
echo shell_exec("cd /www/wwwroot/test;sudo /usr/bin/git fetch --all 2>&1;sudo /usr/bin/git reset --hard origin/master 2>&1");
设置权限
把项目部署服务器 web 项目的执行用户设置到root组并设置免密码(在 php 中使用get_current_user()可以得到执行用户)
输入visudo然后进行如下设置

##测试
然后在本地创建一个测试文件

在服务器端查看结果

成功!
完善
既然功能已经实现,后面我们就需要增加一些辅助功能,比如记录版本/更新日志等,以便发生意外时快速回退。

发表评论
0 条评论