Linux服务器svn远程代码同步
在《搭建svn服务项目并且同步代码到项目目录》这篇文章中,我们简单介绍了使用svn将提交的代码同步到工作目录的实现方法。但是这里有一个问题,就是svn服务和我们的工作目录是在同一台服务器上面的。如果说我们的应用采用分布式部署的话,那岂不是在每一台应用服务器上面都部署svn服务,并且需要多次提交相同的代码。
本章我们就来介绍两种远程同步代码的方式
在hooks中使用scp命令进行远程同步
svn服务器:192.168.5.201
应用服务器:192.168.5.200
在这里我们需要借助scp远程拷贝文件命令。还有我们需要在5.201主机上面新建/STest目录,并且在该目录下检出一份代码。
# mkdir /STest
# cd /STest
# svn checkout svn://192.168.5.201 –username svnuser –password svnuser123
每次提交更新以后,我们先使用之前在一台服务器上面同步代码的方法更新到/STest目录下,然后利用svnlook changed 命令查看更新的文件(其实这里就是在查找/STest目录下更新的文件),最后再利用scp命令将/STest目录下更新的文件拷贝到5.200上对应的目录下。
在hooks目录下面新建post-commit文件,添加如下shell代码
#!/bin/bash
export LANG=zh_CN.UTF-8
REPOS="$1"
REV="$2"
SVN=/usr/bin/svn
SVNLOOK=/usr/bin/svnlook
WEB=/App
LOG=/data/home/auto_svn.log
#更新最新版本内容到本地的/STest
$SVN update $WEB --username svnuser --password svnuser123
#查看更新的文件
upfile=`$SVNLOOK changed -r $REV $REPOS`
#依次拷贝更新的文件到目标主机
for file in $upfile
do
if [ -d /STest/${file} ]; then
#判断是否有新建的文件夹,如果是文件夹先利用ssh登录到目标主机,
#在目标主机上创建文件夹
ssh root@192.168.18.239 "mkdir /www/App/${file}; exit"
elif [ -f /STest/${file} ]; then
#如果更新的是文件,则直接利用scp命令远程拷贝文件到相应的目标文件
scp /STest/${file} root@192.168.18.239:/www/App/${file}
fi
done
此种方式需要借助在5.201上存放一份儿代码,可以认为是scp拷贝文件临时借用的代码。虽说麻烦一些,但是在目标主机上的代码中不会存在.svn目录,可以说提高了应用的安全性。当然了,对于在应用代码中存在.svn的这种情况是可以通过nginx或者apache的重写功能过滤掉。
利用ssh登录目标主机更新文件
这种方式不同于上面的方式的是不需要在本地在存一份临时代码。
首先需要做的就是在目标主机5.200上新建应用项目/www/App,然后进入该应用目录,检出一份儿代码
#mkdir /www/App
#cd /www/App
#svn checkout svn://192.168.5.201 –username svnuser –password svnuser123
然后在每次有更新的代码提交的时候,使用ssh登录到目标主机,使用svn update 更新应用代码。
同样需要在hooks目录下新建post-commit 文件,编写shell代码如下
#!/bin/bash
export LANG=zh_CN.UTF-8
REPOS="$1"
REV="$2"
SVN=/usr/bin/svn
SVNLOOK=/usr/bin/svnlook
MASTERDIR=/www
TARGETDIR=/App
LOG=/data/home/auto_svn.log
#查看更新的文件夹
updirs=`$SVNLOOK dirs-changed -r $REV $REPOS`
CHANGEDIR=$(echo "$updirs" | head -1) # updirs里的最上级目录
#使用ssh登录目标主机,进行更新操作
ssh root@192.168.5.200 “export LANG=zh_CN.UTF-8; svn update --username svnuser --password svnuser123 ${MASTERDIR}${TARGETDIR}”
上面这种方法不好的地方就是代码中会存在.svn目录,这样存在安全性问题。不过这是可以通过nginx重写功能过滤掉的。
上面两种方式各有优劣,我个人喜欢使用第一种方式。希望本章的介绍能帮到大家。
本文转载自:迹忆客(https://www.jiyik.com)
以上是 Linux服务器svn远程代码同步 的全部内容, 来源链接: utcz.com/z/290073.html