当前位置: > Linux服务器 > SVN >

svn发布脚本

时间:2015-02-08 00:25来源:linux.it.net.cn 作者:IT

下面这个脚本应该日常运维的工作中应该经常使用的到,适合全量、增量发布。
假如svn地址是svn://192.168.1.1/trunk,下面有test、release等目录。每个目录下有当前日期命名的目录。目录里面就是开发的程序,目录结构如下:
svn://192.168.1.1/trunk
release
         20131223
         20131224
test
         20131223
         20131224
脚本的目的是通过svn自动发布程序。这个脚本在内网平常都是开发同事自动发布,也为运维省去了一大部分的工作量。脚本内容如下:

#版本发布工具
#!/usr/bash

svnPath="svn://192.168.1.1/trunk";                 =======>svn路径
svnDir="/var/svn/www";                                  =======>发布机上svn目录,注意这些目录不需要创建。
webDir="/opt/www";                                     =======>发布机上的应用目录,注意这些目录不需要创建。

echo "请选择要发布的版本类型"
deployTarget=`svn list ${svnPath}`
select deployTarget in $deployTarget
 do
   break;
done;

echo "请选择发布分支";
if [ "${deployTarget}" == 'test/']; then
   select tasks in `svn list ${svnPath}/test`
   do
          tasks=${tasks/\//};
          svnUrl="${svnPath}/test/${tasks}";
          break;
   done;
fi
if [ "${deployTarget}" == 'release/']; then
   select tasks in `svn list ${svnPath}/release`
   do
          tasks=${tasks/\//};
          svnUrl="${svnPath}/release/${tasks}";
          break;
   done;
fi

choose="yes no"
echo "请确认svn地址: ${svnUrl}";
select comfirm in $choose
do
   if [ "${comfirm}" != "yes" ];then
          echo "发布程序结束";
          exit 0;
   fi
   break;
done;

hasSvnRevison=`svn log -r PREV:HEAD ${svnDir} | grep "\-\-\-\-\-\-"`;
if [ "${hasSvnRevison}" == "" ]; then
   echo "检出svn目录"
   svn co ${svnUrl} "${svnDir}";
else
   echo "切换svn目录"
   svn sw ${svnUrl} "${svnDir}";
fi

rsync -av --exclude=".svn/" --delete --delete-after ${svnDir}/ ${webDir}
最重要的内容都如上显示,但是一般发布机和应用不应该在一台服务器(为了防止网络中断啥的),然后就是需要做一个ssh无密码认证,将发布机上的${webDir}目录同步到应用程序那台服务器的应用目录下即可!至于你还需要校验权限,或者替换一些配置文件啥的,你都可以在脚本里面定义好!

(责任编辑:IT)
------分隔线----------------------------