Shelton

如何使用Git Hooks自动部署项目

如何使用Git Hooks自动部署项目

起因

继上次搭建好git服务器后,每次部署项目都要ftp上去,太过麻烦了,像我这种这么”懒”的人,如何忍受。于是google了下,才发现git有Git Hooks这个东西,太方便了,废话不说写下过程存档。

关于

Git Hooksgit的钩子,Git Hooks能使git在特定的重要动作发生时触发,我们这里使用的是服务端下的post-receive钩子脚本,简单来说就是我们每次push代码到远程仓库就会执行post-receive这个脚本里面的代码。

关于git hooks的更多信息可以访问git-scm

开始

建立仓库

首先我们新建两个仓库,一个是服务器仓库,一个是本地仓库,输入命令:

1
2
3
4
5
6
7
8
9
10
11
# 服务器仓库
cd /home/git
mkdir serverRep
cd serverRep
git init --bare
#本地仓库
cd ..
mkdir localRep
cd localRep
git init

修改post-receive

接下来我们进入到serverRep下的hooks文件夹,你会看到有很多个脚本文件,如果没有找到post-receive,那么我们新建一个并进行编辑,输入命令:

1
touch post-receive && vi post-receive

然后把下面代码复制到post-receive(这是我自己使用的):

1
2
3
4
5
6
7
8
9
10
#!/bin/sh
echo "--initializing hook--"
unset GIT_DIR
deployPath='/home/git/localRep' #local repository path
cd $deployPath
#git add . -A && git stash #此处可不开启
git pull origin master
echo "--update completed--"

再执行

1
chmod +x post-receive

然后再为两个仓库设置下owner,输入命令:

1
2
chown -R git:git serverRep
chown -R git:git localRep

添加remote

然而我们的本地仓库还没设置远程仓库呢(把服务器仓库pull到本地仓库),我们再为本地仓库设置remote到服务器仓库,进入到本地仓库目录下,输入命令:

1
2
3
cd /home/git/localRep
# 添加服务器仓库(远程仓库)
git remote add origin /home/git/serverRep,

远程仓库添加也可以用下面这个:

1
git remote add origin ssh://git@vps_ip/home/git/serverRep

部署项目路径

到这里我们只要push代码到服务器仓库,本地仓库也就会从服务器仓库pull一份过来。假设我们服务器的项目路径是/var/www/html,但代码是在本地仓库,我们只要把当前本地仓库路径软链接到项目路径就好了(文件同步保持变化),输入命令:

1
ln -s /home/git/localRep /var/www/html

最后

这里只是我使用Git Hooks进行简单的项目自动部署而已,Git Hooks还有更加高级的玩法,用到的时候再去挖掘。

Just enjoy it!