使用GIT钩子进行代码自动部署
利用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的妙用,工作区和仓储可隔离