下面这个脚本应该日常运维的工作中应该经常使用的到,适合全量、增量发布。
假如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}目录同步到应用程序那台服务器的应用目录下即可!至于你还需要校验权限,或者替换一些配置文件啥的,你都可以在脚本里面定义好!