应用环境:在北京的svn服务器提供代码归档服务为开发和本地的持续集成编译测试环境,成都开发人员每个人都需要***连接并且不稳定。后来成都部署了本地持续集成环境换取代码,从北京同步完全不现实。触使了成都本地同步北京代码的必要性。

实现方式:

1.首先想到的是使用svn的镜像同步工具来同步即svnsync。但是通过这个方式同步数据,第一同步时不能有代码的提交,同步起来速度比较慢。后续同步(使用hook用北京的提交触同步命令)也很容易出现文件被锁的情况。

2.第二种方式使用linux的rsync的工具同步北京svn服务器的代码根目录到成都,建立起成都的svn服务设置访问目录就实现了完美同步,包括权限的等等,而且所以的数据都完全一直,同步速度也很不错。只要解决了成都svn服务器的***连接就可以稳定的运用。

ps:这种方式同步后的成都svn服务。完全和北京保持一直,本地的变动也会在下次的同被北京数据覆盖,所以运用的为成都的Teamcity的自动化环境获取代码也完美解决的,如果开发人员的获取提交想要在本地提交成都同步到北京还需要做一下两地的同步目录的相互同步。

3.解决两地同步的***网络问题实现***宕机的自动连接,就要写一个自动的连接脚本。首先***帐号密码由专门的人员管理,开发和运维是没有***的拨号密码的,所以就涉及到了脚本的加密。

操作过程:

1.配置成都svn服务器的和北京svn服务器的网络互通,cisco的***,linux服务拨号使用***c这个工具s

 #!/bin/bash
if [ `id -u` -ne 0 ];then
echo "please use root user"
exit
fi

×××=`ifconfig | grep tun
echo $×××
if [ -z "$×××" ]
then
cd /home/sh
./***c.sh
  while [ 1 ]
  do
     Route=`route | grep 192.168.17.0`
     if [ -n "$Route" ]
     then
     route add -net 192.168.17.0 netmask 255.255.255.0 gw 192.168.21.1
     break
     fi
  done
else
  echo $××× >/dev/null
fi

调用的启动脚本***c.sh

#!/usr/bin/expect
set timeout 15
spawn ***c --enable-1des
expect {
        "Enter IPSec gateway address:" { exp_send "x.xxx.xxx.xx\r";exp_continue }
        "Enter IPSec ID for*" { exp_send "***4000\r";exp_continue }
        "Enter IPSec secret for*" { exp_send "cisco\r";exp_continue }
        "Enter username for*" { exp_send "chengdu38\r";exp_continue}
        "Enter password for*" { exp_send "passwd\r"}
}
interact
#expect eof

到现在实现了***的自动连接。

加密shell脚本的方式有提供两种

第一是linux系统自带的gzexe

第二是shc的二进制编译

都可以实现shell中的明文密码ip等信息的不可见。

2.自动同步的操作

有一遍文章很详细的介绍了同步过程

http://www.jb51.net/article/17018.htm