方案缘由: 为解决版本更新问题


项目长期以后,都是研发手动更新文件的方式来进行版本维护更新


这种方式带来的问题是容易漏掉文件出或者版本的不统一。


移交给运维之后,这种方式要进行改变。



为解决这个问题推行SVN更新计划


方案实施如下:



1.第一次办公室提交全部代码至SVN服务器


2.服务器需要把第一次提交的版本手动checkout


3.再更新只要在运维本地电脑基础上修改提交即可通过hocks的post-commit脚本快速更新线上2台服务器



客户端:

windows端 可通过360软件管家安装TortoiseSVN


linux端需要  yum install subversion -y


##所用的工具svn


在SVN版本内管理的文件都有.svn 这个隐藏文件


服务端:


yum install subversion -y


##所用的服务端svnserve 启动端口3690


指定svn的数据存储路径

 mkdir -p /application/svndata

指定svn的配置文件信息路径

mkdir -p /application/svnpasswd

启动svn服务

svnserve -d -r /application/svndata/

创建版本库(多个项目可以建立多个版本库)如api1,api2

svnadmin create /application/svndata/tomcat


cd /application/svndata/tomcat/conf/

##以下每创建一个版本库都要操作,而且操作完还要重启

cp -p svnserve.conf svnserve.conf.default

   进行详细配置

     anon-access = none //禁止匿名访问

     auth-access = write //认证后有读的权限

     password-db = /application/svnpasswd/passwd //指定密码文件

     authz-db = /appplication/svnpasswd/authz //指定权限认证文件


##帐号密码实行统一管理就不需要去每个版本库创建

cp -p authz passwd /application/svnpasswd/


chmod 700 authz 

chmod 700 passwd 


编辑passwd文件配置用户和密码(注意空格)


vim authz


      编辑authz文件配置读取权限

       [<版本库>:/项目/目录]

       @<用户组名> = <权限>

       <用户名>  = <权限>



  杀死svn服务

       pkill svnserve

       启动svn

       svnserve -d -r /application/svndata/


linux 客户端首次checkout(这里我用的本地测试所以用127.0.0.1)

mkdir /svndatas

svn co svn://127.0.0.1/tomcat /svndata/ --username=帐号 --password=密码


#文件名尽量不要用中文,如有应对中文#export LC_CTYPE=en_US.UTF-8


##第二次手动更新


#svn update  --username 帐号 --password 密码 /svndata 



###戏肉部分也就是自动部分就是修改一下hooks的pre-commit,post-commit

cd /application/svndata/tomcat/hooks/

cp post-commit.tmpl post-commit ; cp pre-commit.tmpl pre-commit

#注意权限 

chmod 700 post-commit

chmod 700  pre-commit

vim post-commit


export LANG=en_US.UTF-8

LOGPATH="/app/log"

[ ! -d ${LOGPATH} ] && mkdir ${LOGPATH} -p

SVN=/usr/bin/svn

$SVN update --username 帐号 --password 密码 /svndata

if [ $? -eq 0 ];then

        /usr/bin/rsync -az --delete /svndata /tmp/

mail -s "dear,tomcat $(date +%F%T)" shanxinbo@bwton.com,zhuyouen@bwton.com < /app/log/tomcat.log

fi

##最后一行删除


vim pre-commit

##过滤单个大大的文件和安装包文件的类型,这2条可做可不做,

REPOS="$1"

TXN="$2"

##5M

MAX_SIZE=5242880

FILIER='\.(tar|gz|zip|o|obj|rar)'


#脚本都是shell,这里可自己想做的事情,我这里是测试,rsync 没有复制到安装目录,来一条邮件说明事情结尾这个很有必要




邮件配置以下:删除postfix安装mailx

yum install mailx -y


vim /etc/mail.rc 

set from="gao@163.com"

set smtp=smtp.qiye.163.com

set smtp-auth-user=gao@163.com

set smtp-auth-password=密码

set smtp-auth=login



End,所有操作如上。运维本地提交版本的时候一定要谨慎,确认完毕。起用hooks再在里面编写脚本是会提交通知版本库时就马上自动运行。