之前了解的自动化部署都是jekins
这样集成化的成熟的工具。最近因为有朋友提交代码时,不想登陆服务器拉取代码,才了解到 git hooks
。看来还是git使用不到位。之前一直都是本地开发并提交代码,测试时,人工登陆测试服务器去拉取最新代码。
网上资料还是比较多的,最后在本机测试是成功了的。
主要选要明白几个关键点:
- git init –bare
- post-receive 文件
- SSH 认证
这几个都比较容易找到资料。
git init –bare
和 git init
不一样的是,git init --bare
并不存储实际代码,仓库文件夹不会看到任何项目代码,反而生成了一些 .git
之外的文件夹,其中 hooks
文件夹就是存放git命令操作后需要执行的脚本。
需要新建两个文件夹,一个执行git init --bare
作为远端仓库,一个执行git init
作为服务器项目目录。
本地开发目录和服务器项目目录的remote
都要指向 服务器的远端仓库。
post-receive 文件
post-receive 文件是git push 之后,执行的脚本文件,自动部署的脚本代码就写在这里。 如:
#!/bin/sh
unset GIT_DIR
echo "远程开始更新"
NowPath=`pwd`
echo $NowPath
DeployPath="../deploy"
cd $DeployPath
git pull origin master
echo "远程更新完毕"
cd $NowPath
exit 0
这里有一点比较容易出问题的就是路径,最好还是使用绝对路径。 脚本里还可以加入任何想执行的脚本,比如打包编译。
不过要注意使用 chmod +x post-receive 改变一下权限,服务器端的配置就基本完成了。
SSH认证
这个在 mac os x 和 linux都没有问题,我用别人的windows配置的时候经常都会出现认证失败,就算认证成功了,也无法执行脚本,对这个还是不太熟悉。我猜可能是 cmd 的问题,ssh 登陆后还遇到过乱码。
这些都配置好之后,本地开发只需要提交代码,服务器就可以预览最新代码了。