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

回到顶部