使用 PHP 脚本自动部署 git 项目

背景介绍
一般流程
在用 git 做项目版本控制的时候。一般开发者在开发环境中完成开发,会把代码 push 到代码托管平台(、、、)中。在把 Git库代码 pull 到测试环境中进行项目测试,最后测试通过后的代码 pull 到生产环境中。
自动部署
但每次 push 后,都要 ssh 到服务器上。进入项目目录,再执行 git pull ,如果项目迭代频繁。每次改完代码,都要 push -> ssh -> pull 。过程还是比较繁琐。 那能不能简化这个过程呢? 答案是肯定的,这也是我写篇文章的目的。就是利用 Git hook 的功能,利用 Git hook 实现自动部署方法有很多。我在这里主要介绍何如用 PHP 脚本的方法来实现自动部署项目。测试环境自动部署和生产环境方法是一样的。
准备工作
在服务器上
-
生成公钥 主要用于服务器和 Git 仓库的通信,在执行 git clone 或 git pull 的时候免于用户密码验证。
ssh-keygen -t rsa -C "rockts@sina.com"
# 最好和你代码托管平台用户一直的邮箱地址
# 然后一直回车就行
# 生成的文件通常是 /root/.ssh/id_rsa,如果非root用户请查看提示上的路径
-
准备 hook 文件 在 www 创建 hook 目录,在 hook 目录创建 index.php ,文件如下:
$json = json_decode(file_get_contents('php://input'),true);
if (empty($json['token']) || $json['token'] !== $token) {
exit('error request');
}
$cmds = array(
"cd $target ","git reset --hard origin/master && git clean -f ","git pull","chown -R {$wwwUser}:{$wwwGroup} $target/",);
foreach ($cmds as $cmd) {
shell_exec($cmd);
}
如果有其他需求,比如 build、watch 都可以写这里 $wwwUser 是服务器 web服务 运行用户 Nginx 和 Apache 都不一样,根据各自服务器自行填写。
-
修改目录权限
chown -R www:www /www/hook # 这里请改成你创建的hook目录
-
配置 git
git config --global user.name "rockts"
git config --global user.email "rockts@sina.com" # 邮箱请与conding上一致
备注:hock 目录的 index.php 文件,必须要确保可以访问。 或者
在代码托管平台
-
添加服务器用户公钥
复制服务器上刚创建的的公钥到 Coding -> 账户的 ->SSH公钥 -> 新增公钥
cat /root/.ssh/id_rsa.pub
-
添加 hock
在 Coding 上进入您的项目 在 设置-> WebHook 新建 hook
如果没有问题,稍过几秒刷新页面查看hook状态,显示为绿色勾就OK了。
部署测试
-
先在服务器执行一次 git clone ,以后就可以实现自动部署了
sudo -Hu www git clone git@coding.net:you/repo.git /www/websita.com/ --depth=1
第一次 git clone 一定要用服务器 web 服务运行用户 /www/websita.com/ 服务器项目目录 git@coding.net:you/repo.git 你的 Coding 上代码库地址
-
测试项目,给 Coding 代码库 push 一次
在开发环境
$ cd 项目目录
$ vi test.txt
$ git commit -am 'test hook'
$ git push
过几秒后,你的服务器里项目应该有就 test.txt 就个文件了。 大功告成!
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|