Subversion hooks脚本配置演示及排错

Subversion提供了强大的hooks脚本功能,主要用于控制commit操作前,后的执行动作,以及lock,unlock操作前,后的执行动作;默认在版本仓库下的hooks目录下存在着这些脚本的模板文件;  本节中将介绍下hooks目录下post-commit和pre-commit脚本的使用,其他脚本的功能不同,但执行过程类似;一般pre-commit脚本用来检查用户提交前的条件,例如用来检查用户是否对提交的内容进行了注释等;post-commit脚本用来执行commit动作完成后,测试服务器的自动更新等操作;下面就来演示下这两个功能的实现:

 1:pre-commit脚本,实现功能:用户提交操作时必须填写注释,且大于5个字符,否则提交将会失败。 

  
  
  
  
  1.  
  2. root@java-203-svn:~# cat /usr/local/subversion/repos/sa/hooks/pre-commit      
  3. #!/bin/sh  
  4. #function:verify user's svn commit comment must more than 5 characters,otherwise commit will failure  
  5. #author:lw.yang  
  6. #version: v-1.0  
  7. #modify_time: 2011-03-22  
  8.  
  9. REPOS="$1" 
  10. TXN="$2" 
  11.  
  12. SVNLOOK=/usr/local/subversion/bin/svnlook  
  13.  
  14. LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c`   
  15.  
  16.   if [ "$LOGMSG" -lt 5 ];then 
  17.     echo -e "Log message cann't be empty! you must input more than 5 chars as comment!" 1>&2   
  18.     exit 1    
  19.   fi   
  20.  
  21. exit 0  
  22.  
  23. root@java-203-svn:~# chmod +x  /usr/local/subversion/repos/sa/hooks/pre-commit 

测试: 

  

 

    2:post-commit脚本,实现功能:用户commit操作完成后,测试服务器(本例中为另外一台linux服务器,ip地址192.168.50.7)自动更新用户提交的内容 

  
  
  
  
  1. root@java-203-svn:~# cat /usr/local/subversion/repos/sa/hooks/post-commit  
  2. #!/bin/sh  
  3. #funciton:automatic update svn on remote server  
  4. #author:lw.yang  
  5. #version: v-1.0  
  6. #modify_time: 2011-03-22  
  7.  
  8. IP=192.168.50.7  
  9. DIR=/svn_project/sa  
  10. DATE=$(date)  
  11.  
  12. /usr/bin/ssh root@$IP   /usr/bin/svn update $DIR  
  13.  
  14.  if [ "$?" -eq "0" ];then  
  15.      
  16.     echo "svn update successful on $DATE" >> /var/log/svn_sa_update.log  
  17.     exit 0  
  18.     else  
  19.     echo "svn update failure on $DATE"   >> /var/log/svn_sa_update.log  
  20.  
  21.  fi 
  
  
  
  
  1.  测试:先checkout一份最新的代码  
  2.    [root@rhel5 ~]# mkdir -p /svn_project  
  3.    [root@rhel5 ~]# cd /svn_project/  
  4.    [root@rhel5 svn_project]# svn co http://svn.***.com/sa  --username=yangliangwei --password=123456 
  5.    A    sa/branchs  
  6.    A    sa/trunk  
  7.    A    sa/trunk/apache_2.2.16.sh  
  8.    A    sa/trunk/install-pureftp.sh  
  9.    A    sa/trunk/mysql_5.1.36.sh  
  10.    A    sa/trunk/svn_co_ex_rsync.sh  
  11.    A    sa/trunk/ks.cfg  
  12.    A    sa/tags  
  13.  
  14. 迁出后的trunk目录文件如下     
  15. [root@rhel5 trunk]# ls  /svn_project/sa/trunk/  
  16. apache_2.2.16.sh  install-pureftp.sh  mysql_5.1.36.sh  svn_co_ex_rsync.sh ks.cfg 

  

 

  
  
  
  
  1. 出现上面的错误,看上去是权限的问题,发现手动运行可以更新成功,基本上可以确定是subversion用户权限的问题,
  2. 这里的svn是以apache方式运行,所以就是daemon用户的权限问题  
  3. root@java-203-svn:~# /usr/local/subversion/repos/sa/hooks/post-commit   
  4. A    /svn_project/sa/trunk/post.txt  
  5. Updated to revision 9.  
  6. [root@rhel5 trunk]# ls  /svn_project/sa/trunk/  
  7. apache_2.2.16.sh  install-pureftp.sh  ks.cfg  mysql_5.1.36.sh  post.txt  svn_co_ex_rsync.sh  
  8.  
  9. 修改daemon用户的家目录和登录shell配置,并建立公钥信任  
  10. root@java-203-svn:~# ps -ef |grep httpd  
  11. root     11934     1  0  2010 ?        00:00:01 /usr/local/apache2/bin/httpd -k start  
  12. daemon   19722 11934  0 15:30 ?        00:00:00 /usr/local/apache2/bin/httpd -k start  
  13. root@java-203-svn:~# grep  'daemon' /etc/passwd     
  14. daemon:x:2:2:daemon:/home/daemon:/bin/bash  
  15. root@java-203-svn:~# mkdir /home/daemon  
  16. root@java-203-svn:~# cp -rvp /etc/skel/.bash* /home/daemon/  
  17. root@java-203-svn:~# chown -R daemon.daemon /home/daemon/
  18. root@java-203-svn:~# su - daemon  
  19. [daemon@java-203-svn ~]$ ssh-keygen   
  20. The key fingerprint is:  
  21. 3a:a2:b3:13:a2:9d:ae:00:00:88:4a:06:28:20:8e:fc daemon@java-203-svn  
  22. [daemon@java-203-svn ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]  
  23. 28  
  24. [email protected]'s password:   
  25. Now try logging into the machine, with "ssh '[email protected]'", and check in:  
  26.  
  27.   .ssh/authorized_keys  
  28.  
  29. to make sure we haven't added extra keys that you weren't expecting.  
  30.  
  31. [daemon@java-203-svn ~]$ date && ssh [email protected] date  
  32. Tue Mar 22 16:03:15 CST 2011  
  33. Tue Mar 22 16:03:15 CST 2011 

 

 

发现自动更新成功,OK,大功告成,收工,哈哈…

[root@rhel5 trunk]# ls  /svn_project/sa/trunk/
apache_2.2.16.sh  install-pureftp.sh  ks.cfg  mysql_5.1.36.sh  svn_co_ex_rsync.sh

本文出自 “斩月” 博客,谢绝转载!

你可能感兴趣的:(SVN,pre-commit,休闲,hooks,post-commit)