搭建内部开发git服务器并使用hook实现自动部署

来源:互联网 发布:java string类getchars 编辑:程序博客网 时间:2024/05/29 16:33

因为公司需要在本地服务器上做项目测试,利于多人开发,为了方便开发人员自己自动部署项目,我直接搭一个git服务器,并且使用git钩子实现本地自动同步开发人员上传的代码,通过docker挂载到合适的docker容器上。这样开发人员git push后,挂载在docker上的项目目录自动同步。

1.搭建本地裸仓库

建议将仓库和挂载目录放在同一个目录下比较方便,反正docker也对挂载目录没什么限制。这里举例仓库是/home/pig/repo/,挂载目录是/home/pig/projects/;

进入/home/pig/repo/目录,执行git init --bare pig.git,会在本地生成一个pig.git裸仓库,接下来两种操作,一是让程序员自己git clone这个裸仓库到本地,然后在本地进行开发;二是如果程序员已经自己建好仓库并且写好代码,可以直接让他们push到我们的裸仓库实现同步。(注意两点:第二种情况需要保证pig.git是裸仓库,裸仓库的定义不是指工作目录为空,而是建好后没有任何操作,否则程序员会推不上去代码);

2.程序员本地生成Id_rsa.pub并交给管理员,管理员将公钥添加到pig用户的.ssh下的known_hosts文件,反正就是一个认证文件。程序员本地添加远程源,git remote add origin pig@server_ip:/home/pig/repo/pig.git/,然后自己push本地仓库。如果说程序员之前自己clone了pig.git仓库,那么会git会自动添加remote源,不需要git remote add,直接做完add,commit操作后push即可或者pull;

3.git仓库自动将改动同步到projects目录,首先进入/home/pig/projects目录下,执行git clone /home/pig/repo/pig.git,之后会在当前目录下生成pig目录。然后切换到/home/pig/repo/pig.git/hooks,复制post_update.samlp为post_update,添加x权限,编辑post_update:

unset GIT_DIR
DIR_ONE=/home/pig/projects/pig/
cd $DIR_ONE
git pull origin master
其实这个也是参照了别人的,原版还有git init、remote add操作,但是我们这里已经事先clone过了,这些命令就没有必要了。

这样当程序员修改并push到本地/home/pig/repo/pig.git仓库后,仓库发现改变会将改动同步到我们的/home/pig/projects/pig项目;

4.docker挂载/home/pig/projects/pig到一个容器中,我们给程序员一个端口,这样以后他们push后就可以直接通过端口测试自己的代码实现。对于测试网站程序还是挺方便的。