SVN钩子hooks

简述

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

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

[[email protected] 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

编辑钩子脚本

[[email protected] 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"

# 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
[[email protected] ~]# 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

原文地址:https://www.cnblogs.com/mingetty/p/9790287.html

时间: 2024-11-09 00:54:21

SVN钩子hooks的相关文章

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

由于项目需要,svn提交后的代码希望再测试服务器上测试,每次提交后还要手动去svn update一次 十分麻烦,配置好svn钩子以后就省去了这些麻烦. 进入svn版本库目录找到hooks目录找到文件post-commit.tmpl 复制出一个命名为post-commit的文件,并修改权限为可执行权限 命令如下: cd /var/data/svndata/myproject/hooks cp post-commit.tmpl post-commit chmod 755 post-commit vi

svn钩子(hooks)

首先你需要搭建出自己的svn环境出来,并能成功导入导出,并且了解svn,这是看这篇文章的前提.... 出于公司开发部需要svn同步更新服务器代码,需要用到svn钩子(hooks)技术,以前从来没听过,没办法只能google了,google半天再一次认同了一个道理:天下文章一大抄啊,东拼西凑终于算是完成了(为啥说算是呢?svn太强大了我所做的只是一点点),不多说了,上例子: 我们公司的部署很简单(svn服务和web服务在同一台主机上): 开发 ----- svn(存储)---- 线上服务器 以前是

svn钩子的使用案例

我在这一篇博文http://lidaxia.blog.51cto.com/11588738/1928773中提到,svn钩子脚本是svn非常实用重要的功能,在工作中,会经常需要用到svn钩子脚本以实现除了svn自带功能之外的附加功能,那么这一篇博文,我们就举例演示一下,svn钩子是用来做什么的,以及怎么用. svn钩子的功能: svn钩子是一个脚本,它的具体写法和linux操作系统中shell脚本的写法并没有什么不同,通俗来说,svn钩子的功能就是当某种版本库事件(删除文件.上传文件.修改文件名

利用SVN钩子同步程序注意事项

暂时记下,此文章内容稍后验证. 前言:其实利用SVN实时同步到WEB服务器即时展现出来的文章已经到处都是,但是我在做的时候 还是有不少的小问题,很多文章也没有提出来过,还有同步也是,我还是记录下自己做过的尤其是一些细节,时间一长又会忘掉了. 同步程序思路:用户提交程序到SVN,SVN触发hooks,按不同的hooks进行处理,这里用到的是post-commit,利用post-commit到代码检出到SVN服务器的本地硬盘目录,再通过rsync同步到远程的WEB服务器上. 知识点:1.SVN的ho

svn学习之一(svn独立服务器搭建)svn钩子了解

SVN实战笔记#####################################################xingxing qq:1218761836 qq群:150181442##################################################### SVN实战  目录SVN实战    1一.SVN简介    1二.SVN运行方式    12.1 svn的访问模式3种    1三.SVN数据格式    23.1 svn 档案库数据格式    2四.

svn钩子自动化同步代码提交任务

##############################################################第一种方式:svn服务端  也是rsync的客户端web        是rsync的服务端svn服务端执行:[[email protected] ~]#sh yum-svn02.sh[[email protected] ~]#mkdir /var/www/bbs -p[[email protected] ~]#svn checkout http://192.168.13.

svn+钩子程序+rsync 自动化同步代码

svn+钩子程序+rsync 自动化同步代码实验环境如下:     IP地址            服务器功能             路径                           同步机制192.168.3.206          svn               svn路径:/data/svn                 rsync客户端192.168.3.210          代码服务器        代码目录:/data/html               rs

SVN钩子运用

一.Svn钩子脚本简介 钩子脚本的具体写法就是操作系统shell脚本程序写法,请根据自己SVN所在的操作系统和shell程序进行相应的开发. 钩子脚本就是被某些版本库事件触发的程序,例如创建新版本或修改未被版本控制的属性.每个钩子都能掌管足够的信息来了解发生了什么事件,操作对象是什么以及触发事件用户的账号.根据钩子的输出或者返回状态,钩子程序能够以某种方式控制该动作继续执行,停止或者挂起. svn的hooks模版功能介绍 start-commit 提交前触发事务 pre-commit 提交完成前

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

目前很多公司还是使用SVN(TortoiseSVN)进行版本控制,使用简单,适合管理一般项目.协同办公软件目前钉钉比较成熟,阿里也一直在宣传推广,这两年公司也在使用,主要用于信息的沟通,其它的绩效.考勤.日志.审批等都是挂载的我们公司内部的系统,很方便,之后钉钉推出了钉钉机器人,一开始觉得没用,也就一直没关注,但是最近我看了钉钉自定义机器人,觉得这个可以好好利用起来,看到网上也有这方面的应用说明,看着很简单,但是按照流程操作起来各种坑,而且相关知识过于碎片化,今天我在这里进行一下简单的整合,梳理