使用GIT钩子进行代码自动部署

Published: Tags: GIT LINUX

利用GIT的钩子,可以减少人工部署代码出错的可能性,又能增加效率。

  • 方法一

先在 /data/web/ 目录(笔者的项目)下,使用 git clone 拉取一次项目的代码文件, 然后再修改服务器仓库(不是项目路径)中的 hooks/post-receive 文件,添加以下代码:

#!/bin/sh

unset GIT_DIR
originPath=$(pwd)
deployPath="/data/web"

cd $deployPath
git pull origin master
cd $originPath

但是这种方法会把 .git 仓库暴露在公网,当然了,如果不开放目录访问其实问题也不大。 简单的解决方法,可以先把项目建立在非公网路径下,然后使用 rsync 命令同步代码过去。

但是其实还有另外一个更加简洁的方法,以下就是我要说的,利用 core.worktree 配置。

  • 方法二

修改仓库的 config 文件,注意 bare 为 false 值,其他根据自己的情况进行修改:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    worktree = /data/web

[receive]
    denycurrentbranch = ignore

然后是钩子的代码:

#!/bin/sh

unset GIT_DIR
git checkout -f

这样的话,就不会把 .git 仓库暴露在公网环境下,而又可以使用钩子进行代码自动部署了。

参考: Git hook之自动化部署 - SegmentFault 思否 通过git自动部署WEB服务上的PHP代码,提交即生效 GIT_DIR和GIT_WORK_TREE的妙用,工作区和仓储可隔离