svn(subversion)是近年来崛起的版本管理工具,是cvs的接班人。目前,绝大多数开源软件都使用svn作为代码版本管理软件,而持续代码构建平台需要从svn上拉代码,所以本章主要配置一下svn。
一、svn环境安装:
# yum install subversion mysql-server httpd mod_dav_svn mod_perl sendmail wget gcc-c++ make unzip perl* ntsysv vim-enhanced mod_ssl -y
 
二、配置svn仓库:
1.新建一个目录用于存储SVN所有文件
# mkdir /data/svn 
2.新建一个版本仓库
# svnadmin create /data/svn/project 
3.添加用户
要添加SVN用户非常简单,只需在/data/svn/project/conf/passwd文件添加一个形如“username=password”的条目就可以了。为了测试,我添加了如下内容:
  1. [users] 
  2. luowei = luowei 
  3. zhangyp = zyp  
4.修改用户访问策略
# vim /data/svn/project/conf/authz记录用户的访问策略,以下是参考:
  1. [groups] 
  2. admin  = luowei,zhangyp 
  3. [/] 
  4. @admin = rw 
  5. * = 
说明:以上信息表示,只有admin用户组有根目录的读写权。r表示对该目录有读权限,w表示对该目录有写权限,rw表示对该目录有读写权限。最后一行的* =表示,除了上面设置了权限的用户组之外,其他任何人都被禁止访问本目录。这个很重要,一定要加上! 
5.修改svnserve.conf文件,让用户和策略配置升效.
# vim /data/svn/project/conf/svnserve.conf内容如下: 
  1. [general] 
  2. anon-access = none 
  3. auth-access = write 
  4. password-db = /data/svn/project/conf/passwd 
  5. authz-db = /data/svn/project/conf/authz 
6.启动服务器
# svnserve -d -r /data/svn
注意:如果修改了svn配置,需要重启svn服务,步骤如下: 
# ps -aux|grep svnserve
# kill -9 ID号
# svnserve -d -r /data/svn
 
三、配置SVN服务器的HTTP支持
1.转换svn的密码
由于svn密码是明文的,HTTP服务器不与支持,所以要转换HTTP支持的格式。
下面通过一个perl脚步进行转换:
  1. #!/usr/bin/perl  
  2. #  
  3. use warnings; 
  4. use strict; 
  5. #open the svn passwd file  
  6. open (FILE, "passwd") or die ("Cannot open the passwd file!!!n"); 
  7. #clear the apache passwd file  
  8. open (OUT_FILE, ">webpasswd") or die ("Cannot open the webpasswd file!!!n"); 
  9. close (OUT_FILE); 
  10. #begin  
  11. foreach (<FILE>) { 
  12.   if($_ =~ m/^[^#].*=/) 
  13.     { $_ =~ s/=//; 
  14.       `htpasswd -b webpasswd $_`; 
  15.     } 
执行即可。 
2.修改apache配置文件,添加支持svn的内容:
# vim /etc/httpd/conf/httpd.conf  添加以下内容:
  1. <Location /project> 
  2.   DAV svn 
  3.   SVNPath /data/svn/project/ 
  4.   AuthType Basic 
  5.   AuthName "svn for project" 
  6.   AuthUserFile /data/svn/project/conf/webpasswd 
  7.   AuthzSVNAccessFile /data/svn/project/conf/authz 
  8.   Satisfy all 
  9.   Require valid-user 
  10. </Location> 
# chown -R apache.apache /data/svn/project/ 重启apache服务:# service  httpd restart
3.添加ssl认证:
生存密钥文件

持续集成代码管理平台svn版本库控制(二)_svn 

修改apache的配置文件:
# vim /etc/httpd/conf.d/ssl.conf   //修改一下两项:
  1. SSLCertificateFile /etc/httpd/conf/httpd.pem 
  2. SSLCertificateKeyFile /etc/httpd/conf/httpd.key 
如下图所示:

     持续集成代码管理平台svn版本库控制(二)_svn_02

修改apache的主配置文件:
  1. <Directory /> 
  2.     Options FollowSymLinks 
  3.     AllowOverride None 
  4.     SSLRequireSSL  //添加这一行 
  5. </Directory>  
然后重启apache
配置完成,接下来实现svn高级配置。
 
四、配置邮件提醒支持
1.安装Perl模块Module::Build
  1. # tar xvf Module-Build-0.36_11.tar.gz 
  2. # cd Module-Build-0.36_11 
  3. # perl Build.PL 
  4. # ./Build 
  5. # ./Build test 
  6. # ./Build install 
  7. # cd .. 
2.安装Perl模块Authen::SASL
  1. # tar xvf Authen-SASL-2.15.tar.gz 
  2. # cd Authen-SASL-2.15 
  3. # perl Makefile.PL 
  4. # make test 
  5. # make install 
  6. # cd .. 
3.安装Perl模块Net::SMTP_auth
  1. # tar xvf Net-SMTP_auth-0.08.tar.gz 
  2. # cd Net-SMTP_auth-0.08 
  3. # perl Makefile.PL 
  4. # make test 
  5. # make install 
  6. # cd .. 
4.安装Perl模块SVN::Notify
  1. # tar xvf SVN-Notify-2.80.tar.gz 
  2. # cd SVN-Notify-2.80 
  3. # perl Build.PL 
  4. # ./Build 
  5. # ./Build test 
  6. # ./Build install 
  7. # cd .. 
5.启动邮件服务器
# service sendmail restart
Shutting down sendmail:                                    [FAILED]
Starting sendmail:                                         [  OK  ]
Starting sm-client:                                        [  OK  ] 
6.配置自动发邮件脚本
修改post-commit脚本,以支持邮件通知功能.
# cd /data/svn/project/hooks/
# vim post-commit
内容如下:
  1. #!/bin/sh 
  2. REPOS="$1" 
  3. REV="$2" 
  4.  
  5. cat >/tmp/userlist<<EOF 
  6. luoweiro@126.com 
  7. wei.luo@baisonmail.com 
  8. EOF             //添加邮件通知的列表 
  9.  
  10. IFS=$'\n' 
  11. for LINE in `cat /tmp/userlist`;do 
  12.   /usr/bin/svnnotify --repos-path "$1" --revision "$2" --to $LINE --from 282127408@qq.com  --handler "HTML::ColorDiff" --with-diff --smtp localhost --smtp-user root --smtp-pass 5201314318 -c "UTF-8" -g zh_CN -O raw --svnlook /usr/bin/svnlook --subject-prefix '[SVN UPDATE]' 
  13. done 
测试提交更新收到邮件:

     持续集成代码管理平台svn版本库控制(二)_持续集成代码平台_03

 
五、使用svnstat分析SVN数据:
1.svnstat是JAVA应用程序,需要先安装JAVA环境。
下载jre,URL: http://javadl.sun.com/webapps/download/AutoDL?BundleId=39484
安装:
  1. # rpm -ivh jre-6u20-linux-i586.rpm  
 
2.下载并解压svnstat
  1. # wget http://downloads.sourceforge.net/project/svnstat/svnstat/Release-1.0/SvnStat-1.0.zip?use_mirror=jaist 
  2. # unzip SvnStat-1.0.zip 

3.更新代码
# pwd
/root 
# svn co svn://192.168.158.216/project
Authentication realm: <svn://192.168.158.216:3690> a445a473-9def-448a-9560-b008c929378f
Password for 'baison': 
 
-----------------------------------------------------------------------
ATTENTION!  Your password for authentication realm:
 
   <svn://192.168.158.216:3690> a445a473-9def-448a-9560-b008c929378f
 
can only be stored to disk unencrypted!  You are advised to configure
your system so that Subversion can store passwords encrypted, if
possible.  See the documentation for details.
 
You can avoid future appearances of this warning by setting the value
of the 'store-plaintext-passwords' option to either 'yes' or 'no' in
'/root/.subversion/servers'.
-----------------------------------------------------------------------
Store password unencrypted (yes/no)? yes 
4.生成svnstat数据
  1. # svn log project -v --xml --non-interactive > project.log 
  2. # cd SvnStat-1.0 
  3. # java -classpath SvnStat-all.jar de.agentlab.svnstat.SvnStat -jar SvnStat-all.jar -r /root/project.log -d /var/www/html/ 
 
5.用浏览器登录即可看到许多统计出来的图表。大致如下图所示:
https://192.168.158.216

持续集成代码管理平台svn版本库控制(二)_svn_04

 
 
六、用statsvn分析SVN数据
1.下载并解压statsvn
  1. # unzip statsvn-0.7.0.zip 
  2. # cd statsvn-0.7.0  
2.生成statsvn数据
  1. # mkdir /var/www/html/statsvn 
  2. # java -jar statsvn.jar -verbose -output-dir /var/www/html/statsvn/ /root/project.log /root/project 

3.用浏览器测测试效果如下图:
https://192.168.158.216/statsvn 

 

持续集成代码管理平台svn版本库控制(二)_svn_05

 

    到此配置完成!