利用 Git-hooks 部署项目

利用 Git-hooks 部署项目

设置远程仓库

1
2
# 转到裸仓目录(参考《搭建简单的Git服务》新建的裸仓)
$ cd /data/gitreop/blog.git

git 默认是禁止push的,所有要设置允许push:

1
$ vi config

修改或添加如下内容:

1
2
[receive]
      denyCurrentBranch = ignore

编辑自动部署脚本

自动部署用到git hooks,在git路径下有个hooks文件夹,里面有一些示例。我们把 post-update.sample 重命名为 post-update,并进行编辑:

1
2
$ mv post-update.sample post-update
$ vi post-update
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/sh
#
# An example hook script to prepare a packed repository for use over
# dumb transports.
#
# To enable this hook, rename this file to "post-update".

#exec git update-server-info

unset GIT_DIR

NowPath=`pwd`

DeployPath="/data/www/blog"

cd $DeployPath
git pull origin master

cd $NowPath

echo 'deploy success'
exit 0

这样每当 push master 分支到服务器时,都会自动切换到 DeployPath,也就是 Nginx root 路径,执行 git pull origin master 从仓库拉去最新 master 分支。

部署路径初始化

先把空的仓库克隆到路径下,即为生产目录添加裸仓的URL。

1
2
$ cd /data/www
$ git clone /data/gitreop/blog.git

对于要部署的路径,要把所有者改为:git ,因为 git-hooks 需要该目录读写权限。

1
$ sudo chown -R git:git blog

至此,Git 自动部署已经设置完毕,每当在本地执行 git push 的时候,远程的 git-hooks 就会被自动触发。

赞赏