利用 git 完成项目部署自动化

  in   tech with  0  comment

因为 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
# 检测是否添加完成

如出现类似下图提示则证明添加完成

20171012222650.png

在部署服务器关联该仓库

关联该仓库,并设置该仓库位 web 项目目录,并测试可以打开

添加通知地址

20171012224123.png

勾选 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然后进行如下设置

20171012232318.png

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

在服务器端查看结果
20171012234336.png

成功!

完善

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

Responses