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)最后一部在去掉每行末尾的/

     

  • 相关阅读:
    ReactNative: 数据请求
    ReactNative: 使用Geolocation的API获取位置信息
    ReactNative: 使用第三方库图像选择器react-native-image-picker和react-native-image-crop-picker
    MDG_TR_DEST
    【VerySky原创】后台JOB运行-相关表
    【VerySky原创】RPR_ABAP_SOURCE_SCAN
    【VerySky原创】 ME9F
    【VerySky原创】如何查找SNRO编号范围的使用情况;
    【VerySky原创】怎样查找到CDHDR、CDPOS表中的OBJECTCLAS字段
    【由VerySky原创】由Number Range 导致凭证生成但无法保存的问题
  • 原文地址:https://www.cnblogs.com/pangbing/p/6602216.html
Copyright © 2011-2022 走看看