• SVN钩子hooks使用


    简述

    由于安全原因,Subversion版本库在一个空环境中执行钩子脚本-->就是没有任何环境变量,甚至没有$PATH或%PATH%。注意必须在你的钩子中设置好环境变量或为你的程序指定好绝对路径。

    默认情况下,SVN版本库钩子的目录中包含各种版本库钩子模板

    [root@localhost hooks]# ll /svn/HLink/hooks/
    总用量 36
    -rw-r--r-- 1 root root 1977 12月 19 2016 post-commit.tmpl
    -rw-r--r-- 1 root root 1638 12月 19 2016 post-lock.tmpl
    -rw-r--r-- 1 root root 2289 12月 19 2016 post-revprop-change.tmpl
    -rw-r--r-- 1 root root 1567 12月 19 2016 post-unlock.tmpl
    -rw-r--r-- 1 root root 3426 12月 19 2016 pre-commit.tmpl
    -rw-r--r-- 1 root root 2410 12月 19 2016 pre-lock.tmpl
    -rw-r--r-- 1 root root 2786 12月 19 2016 pre-revprop-change.tmpl
    -rw-r--r-- 1 root root 2100 12月 19 2016 pre-unlock.tmpl
    -rw-r--r-- 1 root root 2780 12月 19 2016 start-commit.tmpl

    start-commit  事务创建之前

    传给 hook 的 参数:

    -         参 数 1 , 代码库路径。

    -         参 数 2 , 试图提交的用户名。

    hook 的返回值:非 0 则 终止。

    一 般用途:判断用户是否有权限进行提交 操作。

    pre-commit  事务完成,但未提交

    -         参 数 1 , 代码库路径。

    -         参 数 2 , 事务名。

    hook 的返回值:非 0 则 终止提交,操作回滚。

    一 般用途:对提交内容进行检查。如要求 提交必须填写提交信息。

    post-commit  事务提交完毕,新的修订版被 创建

    传给 hook 的 参数:

    -         参 数 1 , 代码库路径。

    -         参 数 2 , 刚创建的修订版号。

    hook 的返回值被忽 略。

    一 般用途:发送邮件通知,或备份代码 库。

    pre-revprop-change  修改修订版属性(如提交时提 供的信息 message )之前

    由于修订版属性一旦修改就会 永久的丢失,除非安装这个事件的 hook ,subversion 的 客户端不允许远程修改修订版属性。

    传给 hook 的 参数:

    -         参 数 1 , 代码库路径。

    -         参 数 2 , 要修改的修订版号。

    -         参 数 3 , 操作用户名。

    -         要 修改的属性。

    hook 的返回值:非 0 则 终止。

    一 般用途:保存修订版属性的改变记录。

    post-revprop-change  修订版属性值被修改之后。

    如果没有安装 pre-revprop-change 的 hook , 这个事件的 hook 不会被执行。

    传给 hook 的 参数:

    -         参 数 1 , 代码库路径。

    -         参 数 2 , 要修改的修订版号。

    -         参 数 3 , 操作用户名。

    -         要 修改的属性。

    hook 的返回值被忽 略。

    一 般用途:发送邮件

    实践

    因svn仓库在服务器2上, 服务器3是测试服务器, 钩子要远程执行更新脚本.所以先做ssh免密认证

    服务器2上 生成秘钥对   ssh-keygen   , ssh-copy-id 把公钥发给服务器3 

    非默认端口时:  ssh-copy-id    -i   /root/.ssh/id_rsa.pub  '-p 224 root@111.198.29.223'

    [root@localhost ]# ssh-keygen  #回车
    [root@localhost ]# ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.0.3

    编辑钩子脚本

    [root@localhost hooks]# pwd
    /svn/hcloud/hooks

    [root@localhost hooks]# vim post-commit

    #!/bin/bash
    export LANG=en_US.UTF-8
    
    REPOS="$1"
    TXN="$2"
    
    datelog=`date +%Y%m%d`
    datetime=`date +%Y-%m-%d-%T-%A`
    # Make sure that the log message contains some text.
    
    /bin/echo $REPOS $TXN $datetime >>/tmp/svn-hcloud-$datelog.log || exit 1
    
    #  ssh 192.168.0.3 "sh /srv/uphcloud.sh"
    ssh 192.168.0.3 "nohup /srv/uphcloud.sh  >test.log 2>&1 &"

    # Check that the author of this commit has the rights to perform # the commit on the files and directories being modified. # commit
    -access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1 # All checks passed, so allow the commit. exit 0
    [root@local ~]# cat /srv/uphcloud.sh 
    #!/bin/bash
    
    type svn
    if [ $? != 0 ];then
        echo "need install subversion first"
        exit
    fi
    
    cd /srv
    
    [ ! -e /srv/hcloud ]&& mkdir -p /srv/hcloud;cd /srv/hcloud
    
    echo `pwd` >>/srv/herror.log
    echo `date` >>/srv/herror.log
    
    # BScloud 
    
    echo "hcloud" >>/srv/herror.log
    #if [ ! -e /srv/hcloud ]; then
    if [ ! -e /srv/hcloud/web ]; then
        /usr/bin/svn co --no-auth-cache svn://192.168.0.2/hcloud/web --username svn账号 --password 密码 2>&1 >>/srv/herror.log
    else
        #cd /srv/hcloud/
        cd /srv/hcloud/web
        /usr/bin/svn update --no-auth-cache --username svn账号 --password 密码 2>&1 >>/srv/herror.log
        cd /srv
    fi
    
    cp -uraf /srv/hcloud/web/* /data/web/hcloud/web/
    cd /data/web/
    chown -R nginx:nginx hcloud/
    chmod -R 777 /data/web/hcloud/web/web_code/smarty/templates_c
    自用博文.不限传播.欢迎留言.共同进步.
  • 相关阅读:
    四则运算1
    四则运算3
    数组1
    四则运算单元测试
    四则运算2
    数组3
    数组2
    spring aop对service层日志和异常的处理
    Linux设置开机启动
    数据仓库开发——Kettle使用示例
  • 原文地址:https://www.cnblogs.com/mingetty/p/9790287.html
Copyright © 2020-2023  润新知