GIT服务器实现web代码自动部署

转载 2015年11月17日 15:45:45

之前在一台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端代码的各种改变都应该使用开发者电脑进行代码提交,不然会报错。


转载自:http://m.blog.csdn.net/blog/liangpz521/40583539

服务器自动部署项目之GitHooks神器

背景描述在刚开始用git的时候,每次都是将本地将代码push到远程仓库,然后再ssh到服务器上git pull,甚是麻烦。...
  • WSYW126
  • WSYW126
  • 2016年08月09日 23:43
  • 13806

使用Git Hooks实现开发部署任务自动化

转自 http://blog.csdn.net/zstack_org/article/details/53100257 前言 版本控制,这是现代软件开发的核心需求之一...
  • skykingf
  • skykingf
  • 2016年11月14日 17:39
  • 2485

Git自动化部署

Git 自动化部署分两个部分: 搭建自己的git服务器 自动化部署
  • jlin991
  • jlin991
  • 2016年11月22日 23:23
  • 1621

git的自动部署工具

  • 2016年02月28日 10:04
  • 28KB
  • 下载

Git简单应用:部署代码到服务器

我的代码没有放到GitHub上,所以要做的工作是直接将本地代码部署到服务器上。scp命令在项目一开始可能还凑合着能用,或者用FTP也不错,但是Git才是王道啊。 基本过程是:将本地/var/www目录...
  • bencjl
  • bencjl
  • 2016年12月16日 21:33
  • 7165

利用git push向服务器一键部署代码

著作权归作者所有。 商业转载请联系作者获得授权,非商业转载请注明出处。 作者:吴中杰 链接:http://zhuanlan.zhihu.com/airbnb/19757507 来源:知乎 ...
  • hsany330
  • hsany330
  • 2015年11月17日 15:32
  • 797

git 自动部署

1. Server 设置cd ~ mkdir project.git cd project.git git init --bare 2. Client 设置git remote add remote-...
  • a6383277
  • a6383277
  • 2015年11月10日 15:49
  • 348

Git自动部署

Git自动部署文件位于repository下面的hooks里的post-receive #!/bin/sh set -e git-update-server-info gitosis-...
  • zhangxh1013
  • zhangxh1013
  • 2012年08月09日 16:44
  • 5365

自动发布web应用程序或者网站

由于需要自动化构建集成测试,所以需要一整套环境。   关键 1根据源代码的改动自动下载代码,2编译3发布网站    1第一步只需要通过CruiseControl.NET就可以做到     2编译其实就...
  • xuexiaodong2009
  • xuexiaodong2009
  • 2012年04月18日 15:46
  • 9206

jenkins自动部署代码上线2

才开始写bolg感觉太累了,现在开始一些简单的东西不在赘述,估计看着的人也挺伤心的,就长话短说了...
  • onepieceyuan
  • onepieceyuan
  • 2016年12月03日 21:04
  • 1298
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:GIT服务器实现web代码自动部署
举报原因:
原因补充:

(最多只允许输入30个字)