使用钩子脚本的意义:

我们在测试环境中搭建好svn后,开发人员可以正常的上传和下载写好的代码了。但是上传到测试服务器,在版本库中(tshop)是看不到这些数据的。所以在测试环境中(linux测试服务器)也看不到这些数据。所以我们还需要在linux测试服务器中,检出这些数据,放到lanmp(测试环境)中。这样开发才能在linux测试服务器上检测自己的代码是否有问题。这就用到了钩子脚本。

大致思路:

户提交程序到SVN,SVN触发hooks,按不同的hooks进行处理,这里用到的是post-commit(客户机在提交完成时,会执行post-commit中的内容),利用post-commit到代码检出到SVN服务器的本地硬盘目录(linux测试服务器上)

知识点:

1、SVN的hooks

# start-commit 提交前触发事务

# pre-commit 提交完成前触发事务

# post-commit 提交完成时触发事务

# pre-revprop-change 版本属性修改前触发事务

# post-revprop-change 版本属性修改后触发事务

我们现在客户机上以adm用户登录svn版本库。在版本库中创建wwwroot根目录。然后在客户端在检出。

编辑钩子脚本

mkdir /jianchu/www -p

svn co --username=adm --password=123 svn://192.168.3.10/tshop/wwwroot/ /jianchu/www

#将wwwroot下的目录检出到/jianchu/www下

mkdir /jianchu/wwwroot -p

useradd www

mkdir /var/log/svn

cd /data/svn/tshop/hooks/

cp post-commit.tmpl post-commit

chmod +x post-commit

vim post-commit

#!/bin/bash

export LANG=zh_CN.UTF-8

REPOS="$1"

REV="$2"

AUTHOR=`/usr/local/bin/svnlook author -r $REV $REPOS`

TIME=`date '+%F %T'`

echo "[$TIME]--[$AUTHOR] svn commit file:" >> /var/log/svn/svn_rain_update.log

lujing=`/usr/local/bin/svnlook changed -r $REV $REPOS | awk '{print $2}' | awk -F/ '{print $1}'|uniq`

if [ $lujing = wwwroot ];then

svnlook changed -r $REV $REPOS |while read line

do

updatePath=`echo $line |awk '{print $2}'|awk -F/ '{for(i=2;i<=NF;i++)printf $i"/"}{printf "\n"}'|sed 's/\/$//g'`

updatePath2=`echo $updatePath|awk -F/ '{for(i=1;i<=NF-1;i++)printf $i"/"}{printf "\n"}'`

fullUpdatePath="/jianchu/www/$updatePath"

fullUpdatePath2="/jianchu/wwwroot/$updatePath"

fullUpdatePath3=`echo $line |awk '{print $1}'`

if [ $fullUpdatePath3 = D ];then

/usr/local/bin/svn update --username adm --password 123 /jianchu/www/$updatePath2 >> /var/log/svn/svn_rain_update.log

rm -rf $fullUpdatePath2

else

/usr/local/bin/svn update --username adm --password 123 /jianchu/www/$updatePath2 >> /var/log/svn/svn_rain_update.log

/usr/bin/rsync -avz $fullUpdatePath $fullUpdatePath2 >> /var/log/svn/rsync.log

chown -R www.www $fullUpdatePath

chown -R www.www $fullUpdatePath2

fi

done

fi

解释:

一、命令格式:

svnlook author -r 更新的版本号(更新的第几次) 产品仓库路径

这条命令就可以获取更新数据的用户了。

例子:

[root@CentOS6-node1 hooks]# svnlook author -r 1  /data/svn/tshop/

adm

#adm用户提交的1版本

[root@CentOS6-node1 hooks]# svnlook author -r 2  /data/svn/tshop/

lisi

#lisi用户提交的2版本

二、

命令格式:

svnlook changed -r 更新的版本号(也是更新的第几次) 产品仓库路径

这条命令会获取更新最新的文件

例子:

[root@CentOS6-node1 hooks]# svnlook changed -r 1 /data/svn/tshop/ #A代表添加

A   abc/

[root@CentOS6-node1 hooks]# svnlook changed -r 2 /data/svn/tshop/

A   abc/asd/

三、

脚本中的

$AUTHOR :这个变量定义的是过滤出提交的用户谁。

$lujing :过滤出用户提交路径是否为wwwroot。我们在搭建服务时,定义的目录wwwroot是让所有的开发上传代码上传到这里。以便于管理(不至于根目录很乱)。adm用户管理根目录

$updatePath:提取上传的文件,并去掉每一行的"/"

例子:

本次11版本一共提交了3个文件如上

1[root@CentOS6-node1 ~]# svnlook changed -r 11 /data/svn/tshop/

A   wwwroot/11111/

A   wwwroot/33333/

A   wwwroot/44/

2[root@CentOS6-node1 ~]# svnlook changed -r 11 /data/svn/tshop/ |awk '{print $2}'

wwwroot/11111/

wwwroot/33333/

wwwroot/44/

3[root@CentOS6-node1 ~]# svnlook changed -r 11 /data/svn/tshop/ |awk '{print $2}'  |awk -F/ '{for(i=2;i<=NF;i++)printf $i"/"}'

11111//33333//44//[root@CentOS6-node1 ~]#

4svnlook changed -r 11 /data/svn/tshop/ |awk '{print $2}'  |awk -F/ '{for(i=2;i<=NF;i++)printf $i"/"}{printf "\n"}'

11111//

33333//

44//

(5)最后一部在去掉每行末尾的/

svn钩子脚本的更多相关文章

  1. 转:Windows下WSH/JS实现SVN服务器钩子脚本阻止提交空日志信息和垃圾文件

    http://blog.csdn.net/caikanxp/article/details/8279921 如何强制用户在提交SVN时填写日志信息? 如果用户使用的都是TortoiseSVN客户端,可 ...

  2. centos7配置svn钩子hooks脚本自动同步代码到项目目录

    由于项目需要,svn提交后的代码希望再测试服务器上测试,每次提交后还要手动去svn update一次 十分麻烦,配置好svn钩子以后就省去了这些麻烦. 进入svn版本库目录找到hooks目录找到文件p ...

  3. svn钩子(hooks)

    首先你需要搭建出自己的svn环境出来,并能成功导入导出,并且了解svn,这是看这篇文章的前提.... 出于公司开发部需要svn同步更新服务器代码,需要用到svn钩子(hooks)技术,以前从来没听过, ...

  4. 钉钉自定义机器人配合SVN钩子事件进行消息的推送实践

    目前很多公司还是使用SVN(TortoiseSVN)进行版本控制,使用简单,适合管理一般项目.协同办公软件目前钉钉比较成熟,阿里也一直在宣传推广,这两年公司也在使用,主要用于信息的沟通,其它的绩效.考 ...

  5. 使用TortoiseSVN的客户端钩子脚本触发Jenkins构建

    我们项目在开发过程中使用了Jenkins构建Windows版本,为了通过自动触发使构建的版本保持最新,可以采用的方法如下: Jenkins Poll SCM:设置Jenkins定时检查变更,在SVN版 ...

  6. 使用python编写svn钩子

    同上一篇trac中安装插件的文章的出发点一样,感觉用文档和口头制定规则在执行上会有偏差并且需要经常引导新人去熟悉规则. 所以,又费了几个小时去琢磨怎么改进svn提交代码的钩子,现有的钩子的功能比较简单 ...

  7. linux 设置svn钩子实现自动更新

    一.svn安装设置 1.安装svn启动 yum install subversion 2.建个svn的根目录,因为项目不止一个 mkdir -p /home/svn/3.新建一个新的空的版本仓库(su ...

  8. 使用SVN钩子强制提交日志和限制提交文件类型

    Subversion本身有很好的扩展性,用户可以通过钩子实现一些自定义的功能.所谓钩子实际上是一种事件机制,当系统执行到某个特殊事件时,会触发我们预定义的动作,这样的特殊事件在Subversion里有 ...

  9. svn钩子(hooks)

    目录 钩子脚本的具体写法就是操作系统中shell脚本程序的写法,请根据自己SVN所在的操作系统和shell程序进行相应的写作 所谓钩子就是与一些版本库事件触发的程序,例如新修订版本的创建,或是未版本化 ...

随机推荐

  1. BigDecimal 中 关于RoundingMode介绍

    RoundingMode介绍 RoundingMode是一个枚举类,有以下几个常量:UP.DOWN.CEILING.FLOOR.HALF_UP.HALF_DOWN.HALF_EVEN.UNNECESS ...

  2. logrotate没有rotate的排查过程

    前言 背景 xxx,你过来把squid的日志检查一下,是否做了日志切割:于是乎开启了logrotate没有切割日志的排查旅程,em--.只能说过程很爽,平时疲于应付繁琐的事情,难得有点时间能一条线慢慢 ...

  3. YC-Framework版本更新:V1.0.2

    分布式微服务框架:YC-Framework版本更新V1.0.2!!! 版本更新,本次版本为V1.0.2 主要更新内容如下所示: 集成ActiveMQ; 集成微信生态(支持微信公众号.微信支付.微信开放 ...

  4. 修复Apache Log4j任意代码执行漏洞安全风险通告

    2021年12月10日 0x01漏洞背景 Apache Log4j 是 Apache 的一个开源项目,Apache Log4j2是一个基于Java的日志记录工具.该工具重写了Log4j框架,并且引入了 ...

  5. Mysql配置文件 16c64g优化

    目录 一.说明 二.配置 一.说明 以下配置适合16核64G及以上的配置,会让性能稍微提高1/3左右. 二.配置 my.cnf [client] port = 3306 socket = /usr/l ...

  6. 设计风格之REST

    一.简介 REST简介 REST 是英文 representational state transfer(表象性状态转变)或者表述性状态转 移;Rest 是 web 服务的一种架构风格;使用 HTTP ...

  7. 【紧急】Log4j又发新版2.17.0,只有彻底搞懂漏洞原因,才能以不变应万变,小白也能看懂

    1 事件背景 经过一周时间的Log4j2 RCE事件的发酵,事情也变也越来越复杂和有趣,就连 Log4j 官方紧急发布了 2.15.0 版本之后没有过多久,又发声明说 2.15.0 版本也没有完全解决 ...

  8. Landsat 现有 Analysis Ready Data (ARD) 数据介绍

    Global Web-Enabled Landsat Data (GWELD)[1] NASA 原先的 Web-Enabled Landsat Data Conterminous U.S. Seaso ...

  9. java 图形化工具Swing 监听键盘输入字符触发动作getInputMap();getActionMap();

    双缓冲技术的介绍: 所有的Swing组件默认启用双缓冲绘图技术.使用双缓冲技术能改进频繁重绘GUI组件的显示效果(避免闪烁现象)JComponent组件默认启用双缓冲,无须自己实现双缓冲.如果想关闭双 ...

  10. mysql绿色版添加服务