GIT服务器实现web代码自动部署
之前在一台vps服务器上面搭建了Git服务器,用来做代码管理,方便团队开发。但是问题也就相应的来了,使用git可以轻松的上传代码,而由于做的是web开发,每次还都得到服务器上把代码手动pull或者复制到网页所在的文件夹下,也就比较麻烦,不适合我这种懒人。git提供了hook机制,可以很容易的实现代码的自动部署。
个人原创,版权所有,转载请注明原文出处:
http://www.embbnux.com/2014/09/05/git_server_let_code_auto_deploy/
一 git机制简要介绍
git使用的是代码仓库,git服务端有仓库,称为远端仓库,我们clone下来的,本地也有一个仓库称为本地仓库。我们commit的时候是把代码提交到了本地仓库,push时,是把代码提交到了远端仓库。pull的时候是把代码从远端仓库下载到本地仓库。
代码仓库对代码的存储使用了版本指针,每个提交的版本都对应一个HEAD指针,当前版本指针随着代码的提交而一直改变。
二 自动部署原理
说说现在代码的分布情况,开发者电脑上的本地仓库,git服务器上的远端仓库,web服务器上的另一个本地仓库,我们浏览器访问的就是这里的代码。
要实现自动部署,就是要当开发者从本地仓库提交代码到远端仓库的时候,自动把代码部署到web服务器的本地仓库,实现开发者本地仓库和web服务器的本地仓库的同步。
三 实现自动部署
按照上面说的,就是要在开发者提交的时候,自动触发脚本,脚本去实现web端代码的部署.
这里就得讲一下git的hook机制,当git服务器接到各种事件时触发,这里使用的hook是
post-receive
这个hook在git服务器受到push请求,并且接受完代码提交时触发。
具体代码体现:
在git远端仓库的hooks目录下新建post-receive文件:
#!/bin/sh #author: embbnux #Blog of Embbnux: http://www.embbnux.com #判断是不是远端仓库 IS_BARE=$(git rev-parse --is-bare-repository) if [ -z "$IS_BARE" ]; then echo >&2 "fatal: post-receive: IS_NOT_BARE" exit 1 fi unset GIT_DIR DeployPath="/var/web" echo "===============================================" cd $DeployPath echo "deploying the test web" #git stash #git pull origin master git fetch --all git reset --hard origin/master time=`date` echo "web server pull at webserver at time: $time." echo "================================================"
保存后赋予可执行权限:
1
chmod
+x hooks
/post-receive
这样在开发者提交代码的时候,就会自动部署。
在这里补充说明下: 因为我建立git仓库时用的是git用户 但是在自动部署时站点服务器采用的是nginx服务器的 git用户属于git组 nginx属于nginx组 所以在这里就是把post-receive设置成nginx组 如果不设置的话在站点目录下是没有办法更新文件的(会提示没有权限操作)
自动部署的时候,我这里使用的是git fetch,也可以使用git pull实现,这里两个的区别主要是pull事先fetch后然后再用merge,来合并本地和远端的代码。但是有个问题,如果开发者在提交过程出现失误,使用git reset复位后,现在远端的代码版本低于web端的代码版本,再使用pull的时候就不能实现和开发者本地的代码的同步。所以这里使用fetch后,在强制使用reset实现web端的代码版本指针和git服务端的一致。由于没有使用merge,所以以后web端的代码就不能在服务器上直接更改了,对web端代码的各种改变都应该使用开发者电脑进行代码提交,不然会报错。
相关文章
- 【精通Linux系列】CentOS7 实战部署tomcat网站服务器
- 转「服务器运维」如何解决服务器I/O过高的问题
- Linux下系统如何监控服务器硬件、操作系统、应用服务和业务
- 将AD域漫游用户配置文件放在samba服务器中
- 在自己电脑上搭建一个ftp服务器
- 为什么大数据服务器还停留在数据中心内部部署
- 高密度服务器适合支持VDI部署吗?
- 龙芯服务器参数
- eclipse下创建maven项目并部署到tomcat服务器(转)
- Safari不能连接到服务器
- Red5边源服务器集群部署
- zabbix 千台服务器自动添加实战
- 客户端-服务器模式
- 使用阿里云ECS服务器部署Overleaf实例
- 云服务器部署mysql数据库
- NATS_05:NATS服务器部署
- 记一次在Linux上面启动部署在tomcat服务器的程序
- 通过GitHub部署项目到Nginx服务器
- 像淘宝、京东这样的大型电商网站服务器构架完全部署解决方案
- 阿里天蝎计划 服务器部署效率提升10倍
- 如何将微前端项目部署在同一台服务器同一个端口下
- 如何使用 Docker 部署 Caddy Web 服务器
- nodejs服务器部署教程二,把vue项目部署到线上
- IDEA中Springboot项目部署到阿里云linux服务器
- IBM HTTP Server ( IHS服务器)SSL证书安装教程