之前我们更新客户端的方法是,一个脚本,把svn的客户端版本检出来。但是每次都重复检出。
由于现在客户端已经有800+M,每次检出基本都需要等待5分钟左右。因此应测试要求,写了个脚本,每次只检出更新部分。其实只是利用了svn的update命令。
脚本实现功能:
1、如果首次使用该脚本,在制定目录中创建一个用于保存版本的文件。然后检出项目。
2、如果不是首次使用,那么更新步骤1检出的项目。然后修改步骤1的版本号(递增),将版本号写入加载flash的jsp配置中。
其中还涉及一些对额外情况的处理,比如如果检出的目标位置已经存在同名文件,那么打包备份这个文件,然后再继续执行正常操作等细微逻辑。
刚看Shell不久,也只是利用零散时间看的。写的不好,欢迎提出。
#!/bin/sh ########################################## # 客户端版本更新系统 ########################################## # CLIENT_INIT_VERSION 客户端新版本,默认是0 # CLIENT_OLD_VERSION 客户端旧版本(存放在VERSION_FILE指定的文件中),当没有时取CLIENT_INIT_VERSION # CLIENT_NEW_VERSION 客户端新版本,默认是CLIENT_OLD_VERSION+1 # VERSION_FILE 存放上次版本的文件 CLIENT_INIT_VERSION='0' CLIENT_OLD_VERSION='0' CLIENT_NEW_VERSION='' VERSION_FILE='client_version.txt' # CLIENT_BASE_PATH 放置前端的目录 # VERSION_CONFIG_FILE 服务器前端版本配置文件 # SVN_PATH 前端SVN地址 CLIENT_BASE_PATH='/data/ylzj_test/img/' VERSION_CONFIG_FILE='/data/ylzj_test/sljweb/version.jsp' SVN_PATH='http://192.168.14.138:8080/svn/slj_release/ylzj' CLIENT_NEW_PATH='' CLIENT_OLD_PATH='' #更新是否成功 IF_SUCC='' initVersionFileIfNoExist(){ if [ -f $VERSION_FILE ];then echo '[INFO] Welcome to use Client Update System.' else echo '[INFO] Welcome to use Client Update System.' echo $CLIENT_INIT_VERSION > $VERSION_FILE if [ -f $VERSION_FILE ];then echo '[SUCC] CREATE VERSION FILE '$VERSION_FILE else echo '[FAIL] CREATE VERSION FILE '$VERSION_FILE fi fi } initClientNewVersion(){ CLIENT_OLD_VERSION=$(cat $VERSION_FILE) echo "[INFO] The old client version is : "$CLIENT_OLD_VERSION CLIENT_NEW_VERSION=$(expr $(cat $VERSION_FILE) + 1) echo '[INFO] The new client version is : '$CLIENT_NEW_VERSION CLIENT_NEW_PATH=$CLIENT_BASE_PATH$CLIENT_NEW_VERSION CLIENT_OLD_PATH=$CLIENT_BASE_PATH$CLIENT_OLD_VERSION } checkIfFileExistAndDoSomething(){ tmpvar=$1 subpath=${tmpvar%/*} existFile=${tmpvar##*/} TMP_BACKUP_FLASH_TAR='' if [ -f $1 -o -d $1 ];then echo '[WARN] Flash dir '$1' has exists, it will be tar and backup.' TMP_BACKUP_FLASH_TAR=$existFile'.tar' cd $subpath echo '[INFO] Archieving '$existFile' to '$TMP_BACKUP_FLASH_TAR tar -zcvf $TMP_BACKUP_FLASH_TAR $existFile echo '[INFO] Removing dir '$existFile rm -rf $existFile cd - fi unset tmpvar unset subpath unset existFile unset TMP_BACKUP_FLASH_TAR } prepareClientDir(){ checkIfFileExistAndDoSomething $CLIENT_NEW_PATH if [ $CLIENT_INIT_VERSION -eq $CLIENT_OLD_VERSION ];then #第一次使用 #创建目录 echo '[INFO] First create the flash dir '$CLIENT_NEW_PATH mkdir -p $CLIENT_NEW_PATH else #非第一次使用,修改flash名字 echo '[INFO] Copying '$CLIENT_OLD_PATH' to '$CLIENT_NEW_PATH mv $CLIENT_OLD_PATH $CLIENT_NEW_PATH fi if [ -d $CLIENT_NEW_PATH ];then IF_SUCC='TRUE' fi } storeThisVersionIfSucc(){ if [ -n $IF_SUCC ]; then echo $CLIENT_NEW_VERSION > $VERSION_FILE echo "<%String version = \"$CLIENT_NEW_VERSION\";%>" > $VERSION_CONFIG_FILE fi } createClient(){ echo '[INFO] Checking out flash version...' svn co $SVN_PATH $CLIENT_NEW_PATH --username=bqli --password=123456 echo '[INFO] Checking out has finished.' } updateClient(){ echo '[INFO] Updating flash version...' svn update $CLIENT_NEW_PATH echo '[INFO] Updating has finished.' } createOrUpdateClient(){ if [ $CLIENT_INIT_VERSION -eq $CLIENT_OLD_VERSION ];then createClient else updateClient fi } echoStartInfo(){ echo '#################################################' echo '# 欢迎使用客户端版本更新系统V1.0' echo '#################################################' } echoEndInfo(){ echo '[SUCC] Finished.' } clear echoStartInfo initVersionFileIfNoExist initClientNewVersion prepareClientDir createOrUpdateClient storeThisVersionIfSucc echoEndInfo