zoukankan      html  css  js  c++  java
  • svn钩子脚本

     

    使用钩子脚本的意义:

        我们在测试环境中搭建好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 " "}'|sed 's//$//g'`

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

      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 " "}'

    11111//

    33333//

    44//

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

     

  • 相关阅读:
    Windows XP下 Android开发环境 搭建
    Android程序的入口点
    在eclipse里 新建android项目时 提示找不到proguard.cfg
    64位WIN7系统 下 搭建Android开发环境
    在eclipse里 新建android项目时 提示找不到proguard.cfg
    This Android SDK requires Android Developer Toolkit version 20.0.0 or above
    This Android SDK requires Android Developer Toolkit version 20.0.0 or above
    Android requires compiler compliance level 5.0 or 6.0. Found '1.4' instead
    Windows XP下 Android开发环境 搭建
    Android程序的入口点
  • 原文地址:https://www.cnblogs.com/pangbing/p/6602216.html
Copyright © 2011-2022 走看看