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