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

个人原创,版权所有,转载请注明出处,并保留原文链接:

http://www.embbnux.com/2014/09/05/git_server_let_code_auto_deploy/

订阅BLOG:Blog of Embbnux   文章浏览量:4,209 views

之前在一台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文件:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

#!/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 fetch,也可以使用git pull实现,这里两个的区别主要是pull事先fetch后然后再用merge,来合并本地和远端的代码。但是有个问题,如果开发者在提交过程出现失误,使用git reset复位后,现在远端的代码版本低于web端的代码版本,再使用pull的时候就不能实现和开发者本地的代码的同步。所以这里使用fetch后,在强制使用reset实现web端的代码版本指针和git服务端的一致。由于没有使用merge,所以以后web端的代码就不能在服务器上直接更改了,对web端代码的各种改变都应该使用开发者电脑进行代码提交,不然会报错。

参考:

http://argcv.com/articles/2078.c

http://blog.csdn.net/a06062125/article/details/11727273

时间: 2024-11-10 08:27:54

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

在Eclipse中使用Maven将Web项目自动部署到tomcat服务器

一.创建Web项目 1.1 选择建立Maven Project 选择File -> New ->Project,如下图所示: 在New窗口中选择 Maven -> Maven Project.点击[next]如下图所示: 1.2 选择项目路径 根据项目的实际情况选择项目的存放目录,也可以选择[Use default Workspace location]默认工作空间.如下图所示: 1.3 选择项目类型 在Artifact Id中选择maven-archetype-webapp,如下图所示

GitLab 实现代码自动部署(转载自https://segmentfault.com/a/1190000011561808)

在当下使用 GIT 来管理代码已经是一种非常流行的方式了.使用 GIT 可以很方便的给代码创建分支,撤销不需要的提交,与他人合作共同编写代码. GitLab 是基于 GIT 实现的现代化的开发者协作平台,它将 issues, code review, CI 和 CD 整合到独立的网站UI,弥补了 GIT 在可视化操作方面的不足. 本文目的 本文的目的是配置实现在 GitLab 平台上的代码自动部署.想要达到的效果是这样子的,当客户端向 GitLab 服务器的特定分支(如:prod)提交代码时,G

Eclipse中的Web项目自动部署到Tomcat

一.原因. 1.写java程序有一段时间了,但很久没用eclipse了,所以使用eclipse编写的web项目部署到tomcat 的方式也不是很清楚,下面记录一下将Eclipse 上的web项目自动部署到tomcat 上的方式: 二.部署问题 1.这里就有个问题,是怎么把Eclipse中的网站项目自动部署到tomcat中.在Eclipse中做的Web项目默认是不支持将项目发布到Web服务器上的,会发布到工作空间的某个目录下,因此无法在外部启动Tomcat来运行Web项目,只有打开Eclipse中

Maven学习教程(七)------将web项目自动部署到tomcat下

一.创建Web项目 1.1 选择建立Maven Project 选择File -> New ->Maven Project,如下图所示: 点击[next]如下图所示: 选择webapp,点击[next]如下图所示: 输入Group ID和 Artifact ID以及Package Group ID一般写大项目名称.Artifact ID是子项目名称. 例如Spring的web包,Group ID:org.springframework,artifactId:spring-web. Packag

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

项目是THINKPHP写的 用了 oschina git 进行版本管理. 公网服务器是CentOS.每次用FTP上传很麻烦. 所以想到了在服务器上安装一个GIT进行 pull代码.因为我的远程服务器数据库和本地不一样,所以代码pull后还需要修改 几个config.php数据库配置文件. 所以想再git 代码更新后,要自动执行config.php文件的替换或者修改. 其中看到这里讨论http://www.v2ex.com/t/81173  git hook 然后看了下比较麻烦.也看不懂. 所以就

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

1.安装 http://www.cnblogs.com/Neddy/archive/2011/02/28/1967548.html 先装依赖,在安装 其中的下载地址可以更改成如下: http://download.chinaunix.net/download/0004000/3744.shtml  该网页下方是最新版本 2.建立服务器 http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b00

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

jdk.tomcat的配置就不多说了,网上一大堆. 一.发现问题 在eclipse中新建Dynamic Web Project,配置好本地的tomcat并写好代码后选择Run on Server,但运行后发现在tomcat的安装目录下的webapps并没有出现所建立的工程名字. 二.验证 很明显项目并没有自动部署到Tomcat的Webapps中而是部署在了别的容器中.在内置浏览器中输入http://localhost:8080/webDemo/login.jsp可正常打开.但在外部浏览器上打开h

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

自动化能解放人类的双手,而且更重要的是,因为按照规定的流程来走,也减少了很多误操作的产生.不知道大家平时都是怎么样更新自己生产环境的代码的,FTP 覆盖旧文件.服务器定时任务去 build 最新的源码,还是有更高级的做法? 目前我在使用 Git Hook 来部署自己的项目.Git Hook 是 Git 提供的一个钩子,能被特定的事件触发后调用.其实,更通俗的讲,当你设置了 Git Hook 后,只要你的远程仓库收到一次 push 之后,Git Hook 就能帮你执行一次 bash 脚本. 下面是

使用docker实现半自动化代码自动部署与回滚

最近开发docker的caas平台,目前已经开发完成,在优化性能与套模板.对于docker最近是很好,很多人把docker做为vm来使用,当然作为测试来说是没问题,但我感觉docker本身在做沙箱.自动化部署与回滚方面更适合,下面介绍一下我这里是如何通过docker实现代码半自动化部署. 目前我这里已经实现能结合svn或者git代码库,对node.php.java代码进行半自动化部署,先给大家截图看效果,感觉满意在继续细看. 总界面如下 点击左上角的"新增开放项目"就可以新建立测试,下