使用钩子脚本的意义:

我们在测试环境中搭建好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. 使用CORS处理跨域请求

    package com.leyou.gateway.config;import org.springframework.context.annotation.Bean;import org.sprin ...

  2. 如何使用table布局静态网页

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  3. MySQL-核心技术

    1.基本查询语句 1.1使用select 语句查询一个数据表 select * from user; 1.2 查询表中的一列或多列 select id,ixdh from user; 1.3从一个表或 ...

  4. 如何用CodeBlocks调试?

    一.简介 这篇文章我主要会介绍CodeBlocks的调试功能,并简单讲述如何使用它. 二.前言 大家好,最近和小伙伴们讨论修改程序的时候,我突然想到,授人以鱼不如授人以渔(指调试),于是这篇文章应运而 ...

  5. DevOps的分与合

    一.抽象的 DevOps DevOps 是使软件开发和 IT 团队之间的流程自动化的一组实践,以便他们可以更快,更可靠地构建,测试和发布软件.DevOps 的概念建立在建立团队之间协作文化的基础上,这 ...

  6. String类源码分析

    1.String类注释说明 /** * The {@code String} class represents character strings. All * string literals in ...

  7. HSPICE与非门仿真

    一.HSPICE的基本操作过程 打开HSPICE程序,通过OPEN打开编写好的网表文件. 按下SIMULATE进行网表文件的仿真. 按下AVANWAVES查看波形图(仿真结果). 二. 网表文件结构总 ...

  8. 有个奇怪的问题,配置成/system/index,jsp页面时没有经过过滤器进行拦截,而配置成redirectAction时是可以直接跳转刀片loginJsp.action

    有个奇怪的问题,配置成/system/index,jsp页面时没有经过过滤器进行拦截,而配置成redirectAction时是可以直接跳转刀片loginJsp.action 但是我直接访问/syste ...

  9. IO复用的三种方法(select,poll,epoll)深入理解

    (一)IO复用是Linux中的IO模型之一,IO复用就是进程告诉内核需要监视的IO条件,使得内核一旦发现进程指定的一个或多个IO条件就绪,就通过进程处理,从而不会在单个IO上阻塞了,Linux中,提供 ...

  10. PSpice基本仿真分析例程

    一.瞬态分析 二.直流分析 2.1.直流分析电路 2.2.直流分析配置 2.3.直流分析输出波形 受供电电源的限制,输出最大值为±15V. 三.交流分析 3.1.1.交流分析电路1 3.1.1.交流分 ...