现在想实现在本地对web代码push之后就将代码同步到线上的web服务器,这样就可以直观的看到效果了。百度和Google有很多的实现的方法,不过不知道是环境的原因还是别的原因,按照这些方法始终没有成功,经过测试下面简单的将实现方法分享下。
我的做法是先登录到我的gitlab的服务器(我们的代码由gitlab进行统一的管理),找到我自己的一个test的项目。
环境说明:
gitlab(10.212.118.56)
webserver(192.168.1.1)
1、首先在gitlab的server中clone一个项目
gitlab服务器中存放代码的目录为(/git/gitlab/apps/gitlab/repositories/xuejinliang/test.git/),此处是我自己的一个test的项目。
2、在server中的/tmp中
git clone /git/gitlab/apps/gitlab/repositories/xuejinliang/test.git/
之后编写hook函数,找到test.git项目的hook文件所在位置
cd /git/gitlab/apps/gitlab/repositories/xuejinliang/test.git/hooks
cat >post-receive <<EOF
#!/bin/bash
unset GIT_DIR
Deploy_Dir=/tmp/test/
remote_dir=/gago/web/test
cd ${Deploy_Dir}
git pull
#/bin/rsync -auzvP --delete /tmp/test/ serverip:/gago/web/test
#ssh root@42.159.145.166 <<EOF
#chown -R www.www /gago/web/test
EOF
后面的三行代码我加上了注释发现,因为在利用Mac端的工具source-tree进行提交的时候,发现rsync会报错,所以我单独的将此rsync写成了一个脚本然后每分钟执行一次,这样就会将同步好的代码同步到web服务器了。(rsync提前做好了免密码操作,基于ssh)。
下面的是rsync的报错
remote: rsync: connection unexpectedlyclosed (0 bytes received so far) [sender]
remote: rsync error: unexplained error (code255) at io.c(605) [sender=3.0.9]
百度Google了下没看解决,希望有同样经验的同学分享下。