虚拟主机与SVN服务器同步方法记录

时间: 2010-03-28 / 分类: 技术相关 / 浏览次数: 1,743 views / 0个评论 发表评论

[文章作者:叶歆昊   最后修改:2010-07-20   转载请注明原文链接:http://littz.com/synchronization-webhosting-with-svn-server.html]

近期的开发工作中需要有多人协作,我们使用SVN来保持各个开发人员之间的文件数据同步,而我们也搭建了演示站点,演示站点是普通的linux虚拟主机没有shell权限,在将本地数据与演示站点数据同步上就有一定困扰了。演示站点上没有SVN,之前只能使用FTP软件不断地使用手工上传覆盖方式保持演示站点上的版本是较新的版本。久而久之手工上传方式有一定困扰,一是手工操作繁琐,二是由于WEB的特点会在短时间之内上传大量的小文件 一定程度上导致被墙的概率发生。

为解决该问题我们书写了相应的shell和php脚本以让程序自动同步。原理如下:
1/shell脚本工作在我的电脑上,Linux(Ubuntu)系统。crontab方式运行,该脚本的主要功能是从svn获取最新版本数据,排除相关目录后导出打包成zip,使用ftp命令行上传至演示站点。

2/PHP脚本工作在演示站点上,Linux(CentOS)系统的虚拟主机。该php的主要功能是解压缩指定的zip文件并删除,为了防止重复解压缩,设置了一个锁文件。

使用方法:
1/需要手工svn checkout一次到/opt/svntmp/update这个目录
2/ crontab -e 书写这样的定时计划

LANG=en_US.UTF-8
*/10 9-22 * * * /opt/svntmp/svnup.sh

每天9点至22点的每10分钟执行这个svnup的shell,特别注意这个LANG设置,要和本机linux系统所使用的字符集相同,要不然会出现手工执行shell ok但是放在crontab中就不成功的问题。
3/将shell中的帐号密码和网址替换成自己的
4/将附件的txt扩展名改成对应的sh和php

附:svnuptoftp.sh的代码

#!/bin/bash
mkdir -p /opt/svntmp/logs/
cd /opt/svntmp/update/
export LANG=en_US.UTF-8
/usr/bin/svn up --username yourusername --password yourpasswd --non-interactive --trust-server-cert --accept theirs-conflict /opt/svntmp/update >> /opt/svntmp/logs/up.log
rm -rf /opt/svntmp/export
/usr/bin/svn export /opt/pksvntmp/update /opt/pksvntmp/export >> /opt/pksvntmp/logs/b.log
rm -rf /opt/svntmp/export/attachments<br>rm -rf /opt/svntmp/export/cache
rm -rf /opt/svntmp/export/data
rm -rf /opt/svntmp/export/config.php
rm -rf /opt/svntmp/export/source.zip
cd /opt/svntmp/export
zip source.zip * -r >> /opt/pksvntmp/logs/zip.log
ftp -n<<!
open xx.xxx.xxx.xxx
user ftpuser ftppasswd
binary
hash
cd /demo
lcd /opt/svntmp/export
prompt
put source.zip
close
bye
!

curl --connect-timeout 20 http://xxx.mydiscuz.com/demo/unzip.php >> /opt/pksvntmp/logs/unzip.log

发表评论

您的昵称 *

您的邮箱 * (绝对保密)

您的网站