Subversion hooks脚本配置演示及排错

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介:

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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
Java 数据安全/隐私保护 Docker
Docker Desktop 启动报错 Unexpected WSL error 问题解决
Docker Desktop 启动报错 Unexpected WSL error 问题解决
1167 0
|
8月前
|
人工智能 数据可视化 测试技术
Apifox与Apipost对比,2025年功能对比与选项建议
Apifox 和 Apipost 作为国内 API 一体化协作平台的佼佼者,都在不断进化,力求为用户提供更全面的解决方案。本文将聚焦“2025 版”,基于两款工具截至 2024 年末至 2025 年中旬的预期功能和行业发展趋势,进行一次全方位、深度的功能对比,旨在为开发者、测试工程师、产品经理及技术决策者在选型时提供有价值的参考。
2303 123
|
8月前
|
Ubuntu 开发工具
Ubuntu环境下以源码编译方式安装Vim的步骤介绍
以上就是在Ubuntu环境下以源码编译方式安装Vim的全部步骤。就像煮一杯咖啡,虽然过程中需要耐心和一些技巧,但等到你熟悉之后,你会发现,不仅可以定制自己喜欢的口味,过程中的乐趣也是不能忽视的。希望你在编译安装Vim的过程中,能体验到这份乐趣。
393 21
|
9月前
|
人工智能 边缘计算 前端开发
人工智能平台 PAI DistilQwen2.5-DS3-0324发布:知识蒸馏+快思考=更高效解决推理难题
DistilQwen 系列是阿里云人工智能平台 PAI 推出的蒸馏语言模型系列,包括DistilQwen2、DistilQwen2.5、DistilQwen2.5-R1 等。DistilQwen2.5-DS3-0324 系列模型是基于 DeepSeek-V3-0324 通过知识蒸馏技术并引入快思考策略构建,显著提升推理速度,使得在资源受限的设备和边缘计算场景中,模型能够高效执行复杂任务。实验显示,DistilQwen2.5-DS3-0324 系列中的模型在多个基准测试中表现突出,其32B模型效果接近参数量接近其10倍的闭源大模型。
|
移动开发 小程序 JavaScript
uni-app多端应用开发:常见跨端兼容问题及处理策略
uni-app多端应用开发:常见跨端兼容问题及处理策略
1282 0
抖音超火的圣诞树代码,html源码分享
抖音超火的圣诞树代码,html源码分享
3666 0
|
JSON 前端开发 API
[flask]统一API响应格式
[flask]统一API响应格式
230 1
|
JavaScript NoSQL 前端开发