--
每次都是将本地将代码push到远程仓库,然后再ssh到服务器上git pull,甚是麻烦。在项目开发中使用git的时候,push之后,编译系统会有自动部署等功能。下面是配置方法
==
首先要明确现在代码的分布情况,
1,开发者电脑上的本地仓库,
2,git服务器上的远端仓库,
3,web服务器上的另一个本地仓库,(我们浏览器访问的就是这里的代码)。
其实自动部署就是要当从开发者本地仓库提交代码到远端仓库的时候,自动把代码部署到web服务器的本地仓库,实现开发者本地仓库和web服务器的本地仓库的同步。(即通过GitHook中的post-receive脚本文件)
==
在(git服务器上的远端仓库) 新建一个目录如 /root/hyf/ws/ ,在该目录下创建了 空的仓库 如 /root/hyf/ws/testhyf.git/
mkdir ws
cd ws
git init --bare testhyf.git
--
(web服务器上)在一个目录 /root/hyf/workspace,克隆刚才创建的仓库
mkdir workspace
cd workspace/
git clone /root/hyf/ws/testhyf.git
--
配置Git Hook
进入到/root/hyf/ws/testhyf.git/hooks文件夹,使用vi post-receive创建一个脚本,当你在本地仓库执行git push后就会触发post-receive。
部署路径为:/root/hyf/workspace/testhyf
post-receive的内容如下:
#!/bin/sh
#判断是不是远端仓库
IS_BARE=$(git rev-parse --is-bare-repository)
if [ -z "$IS_BARE" ]; then
echo >&2 "fatal: post-receive: IS_NOT_BARE"
exit 1
fi
unset GIT_DIR
DeployPath="/root/hyf/workspace/testhyf"
echo "==============================================="
cd $DeployPath
echo "deploying the test web"
#git stash
#git pull origin master
git fetch --all
git reset --hard origin/master
gitbook build
sleep 15
time=`date`
echo "web server pull at webserver at time: $time."
echo "================================================"
保存后赋予可执行权限:
chmod +x post-recevie
chmod +x /root/hyf/workspace/testhyf/hooks/post-receive
这样在开发者提交代码的时候,就会自动部署。
--
==
那么如何测试验证我们的刚才是否实现了推送之后就自动部署呢?