Subversion hooks脚本配置演示及排错

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介:

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 root@192.168.50.7  
  23. 28  
  24. root@192.168.50.7's password:   
  25. Now try logging into the machine, with "ssh 'root@192.168.50.7'", 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 root@192.168.50.7 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

本文转自斩月博客51CTO博客,原文链接http://blog.51cto.com/ylw6006/522712如需转载请自行联系原作者


ylw6006

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
存储 前端开发 开发工具
Git Hooks实战:提交前检查修改文件中是否包含调试代码
Git Hooks实战:提交前检查修改文件中是否包含调试代码
50 0
|
6月前
|
JavaScript Go iOS开发
使用脚本整合指定文件/文件夹,执行定制化 ESLint 命令
描述了如何通过自定义脚本简化 ESLint 命令的执行。该脚本支持指定文件或文件夹,指定 ESLint 配置文件,附带命令,以及前后置执行命令等功能,极大地提高了代码检查和格式化的效率。
35 1
使用脚本整合指定文件/文件夹,执行定制化 ESLint 命令
|
11月前
|
数据挖掘
Rstudio--后台提交代码任务的简单实现-callr
本文分享了一种在R语言同一个会话中异步运行子任务的实现方法,以供参考学习
139 0
|
资源调度 索引
Cypress系列(98)- cypress-xpath 插件, xpath() 命令详解
Cypress系列(98)- cypress-xpath 插件, xpath() 命令详解
341 0
Cypress系列(98)- cypress-xpath 插件, xpath() 命令详解
Cypress系列(99)- cypress-downloadfile 插件, downloadFile() 命令详解
Cypress系列(99)- cypress-downloadfile 插件, downloadFile() 命令详解
318 0
Cypress系列(99)- cypress-downloadfile 插件, downloadFile() 命令详解
|
JavaScript 测试技术 Linux
Npm配置全局安装插件目录以及命令用法扩展
eslint 是一个代码检查的插件,类似sonarqube里面的打码扫描一样,像这种插件的话只需要本地使用,就可以用开发环境的进行依赖包安装。
Npm配置全局安装插件目录以及命令用法扩展
|
搜索推荐 开发工具 git
Git命令集之二——配置命令
Git命令集之二——配置命令
102 0