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

GIT服务器实现web代码自动部署的更多相关文章

  1. 做了一个简易的git 代码自动部署脚本

    做了一个简易的git 代码自动部署脚本 http://my.oschina.net/caomenglong/blog/472665 发表于2个月前(2015-06-30 21:08)   阅读(200 ...

  2. Java代码自动部署

    注:本文来源于<it小熊> [ ①Java代码自动部署-总结简介] 代码部署是每一个软件开发项目组都会有的一个流程,也是从开发环节到发布功能必不可少的环节.对于Java开发者来说,Java ...

  3. Eclipse中的Web项目自动部署到Tomcat的webapp目录下

    Eclipse中的Web项目自动部署到Tomcat   原因 很长时间没用Eclipse了,近期由于又要用它做个简单的JSP项目,又要重新学习了,虽然熟悉的很快,但记忆总是很模糊,偶尔犯错,以前很少写 ...

  4. centos 安装git服务器,配置使用证书登录并你用hook实现代码自动部署

    安装git服务器先安装依赖软件:yum -y install gcc zlib-devel openssl-devel perl cpio expat-devel gettext-devel open ...

  5. git的安装使用和代码自动部署

    1.安装 http://www.cnblogs.com/sunada2005/archive/2013/06/06/3121098.html http://www.cnblogs.com/zhcncn ...

  6. 把github代码自动部署到服务器

    一.参考文献 https://developer.github.com/webhooks/ https://docs.gitlab.com/ee/user/project/integrations/w ...

  7. Jenkins介绍和安装及配合GitLab代码自动部署

    Jenkins是什么? 基于JAVA的开源的自动化系统平台 加速自动化CI,CD任务及流水线,所有类型的任务:构建,测试,部署等 丰富的插件生态系统支持功能扩展,1400+插件和SCM,测试,通知,报 ...

  8. 在Eclipse for mac中配置tomcat,使web项目自动部署到tomcat

    jdk.tomcat的配置就不多说了,网上一大堆. 一.发现问题 在eclipse中新建Dynamic Web Project,配置好本地的tomcat并写好代码后选择Run on Server,但运 ...

  9. **使用 Git Hook 实现网站的自动部署

    http://www.tuicool.com/articles/3QRB7jU 自动化能解放人类的双手,而且更重要的是,因为按照规定的流程来走,也减少了很多误操作的产生.不知道大家平时都是怎么样更新自 ...

随机推荐

  1. 【转】Android思维导图

    转自:http://www.open-open.com/lib/view/open1421201191375.html

  2. 使用Aptana Studio 3开发让Extjs变的更简单

    工欲善其事必先利器,做EXTJS开发先整好IDE,为后续的项目应用做准备. 下载地址 http://www.aptana.com/products/studio3/download# 下载汉化包 配置 ...

  3. springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定

    springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定 标签: springmvc springmvc学习笔记13-springmvc注解开发之集合类型參数绑定 数组绑定 需 ...

  4. go语言之进阶篇显式调用panic函数

    1.显式调用panic函数 示例: package main import "fmt" func testa() { fmt.Println("aaaaaaaaaaaaa ...

  5. asp.net 读取word 文档的方法

    资料一:适合读取并显示(简单而明了) 第一种方法:    Response.ClearContent(); Response.ClearHeaders();   Response.ContentTyp ...

  6. tensorflow语义分割api使用(deeplab训练cityscapes)

    安装教程:https://github.com/tensorflow/models/blob/master/research/deeplab/g3doc/installation.md citysca ...

  7. Limu:有关JavaScript的那些值得一看的书

    来源&作者:Limu 又好久没写东西了 ,写上一篇的时候还以为接下来的工作会轻松一些 ,结果未从我所愿呐 ,又是一阵忙碌.而这段时间穿插着做了很多12年淘宝校园招聘的前端面试 ,很多同学都有问 ...

  8. jquery中对 iframe的操作

    我们先看一下 JQUERY中的对像 contents() 的帮助文件 contents() 概述 查找匹配元素内部所有的子节点(包括文本节点).如果元素是一个iframe,则查找文档内容 示例 描述: ...

  9. Android之ASD组件(一)

    Google在android5.0之后推出新设计标准Material Design,为了能在低版本上使用Material Design,google发布了Android Support Design支 ...

  10. 从item-base到svd再到rbm,多种Collaborative Filtering(协同过滤算法)从原理到实现

    http://blog.csdn.net/dark_scope/article/details/17228643 〇.说明 本文的所有代码均可在 DML 找到,欢迎点星星. 一.引入 推荐系统(主要是 ...