0
点赞
收藏
分享

微信扫一扫

svn hooks

1svn  hooks 

1.1钩子脚本:

写法就是系统中shell脚本程序的写法

当svn版本库发生改变时候,hooks就会触发相应作出执行命令 ,根据hooks输出或者返回的状态,hooks程序能够以某种方式执行该动作继续执行,停止或者挂起、

-rw-r--r-- 1 root root 2780 Oct 22 17:05 start-commit.tmpl

[root@localhost hooks]# pwd

/application/svndata/sadoc/hooks

[root@localhost hooks]# ll

total 36

-rw-r--r-- 1 root root 1977 Oct 22 17:05 post-commit.tmpl

-rw-r--r-- 1 root root 1638 Oct 22 17:05 post-lock.tmpl

-rw-r--r-- 1 root root 2289 Oct 22 17:05 post-revprop-change.tmpl

-rw-r--r-- 1 root root 1567 Oct 22 17:05 post-unlock.tmpl

-rw-r--r-- 1 root root 3426 Oct 22 17:05 pre-commit.tmpl

-rw-r--r-- 1 root root 2410 Oct 22 17:05 pre-lock.tmpl

-rw-r--r-- 1 root root 2786 Oct 22 17:05 pre-revprop-change.tmpl

-rw-r--r-- 1 root root 2100 Oct 22 17:05 pre-unlock.tmpl

-rw-r--r-- 1 root root 2780 Oct 22 17:05 start-commit.tmpl

[root@localhost hooks]#

对每种subversion版本库支持的钩子都有一个模板,通过查看这些脚本的内容,我们可以看到 的是什么事件触发了脚本以及如何给脚本传递数据

同时,这些模板也是如何使用这些脚本,结合subversion支持的工具来完成任务的例子。

要实际安装一个可用的钩子,你需要在repo/hooks 目录下安装一些与钩子同名的可执行的程序或者脚本

注意:

由于安全原因,subversion版本库在一个空环境中执行钩子脚本就是没有任何环境变量,甚至没有$PATH或者%PATH% 由于这个原因,许多管理员会感到困惑,  他们的钩子脚本手工运行时正常,可以在subversion中却不能运行。 要注意,必须在你的钩子中设置好“环境变量”或者为你的程序制定好“绝对路径”

1.2 svn的hooks模板

1.2.1常用的钩子脚本

post-commit        在提交完成成功创建版本之后执行该钩子,提交已经完成,不可更改,因此,本脚本的返回值被忽略提交完成时候出发事务

pre-commit        提交完成触发执行该脚本  

start-commit       

在客户端还没有向服务器提交数据之前,即还没有建立  subversiontransaction之前执行该脚本

1.3 svn hooks生产环境应用场景举例

pre-commit 

限制上传文件大小扩展名及大小,控制提交要输入的信息等、 

post-commit 

svn 更新自动周知,MSN,邮件短信周知

svn更新触发checkout程序,然后实时rsync送到服务器等

1.3.1 svn钩子生产应用实战。 

案例一:rsync与svn钩子结合实现数据同步某企业小案例 

a,建立同步web目录:


[root@localhost hooks]# mkdir  -p  /data/www

b,将svn中内容checkout到WEB目录一份

[root@localhost www]# svn co svn://192.168.2.48/sadoc  /data/www/ --username=wyb  --password=123456

[root@localhost www]# ls

a.html  b.html  c.html   svn.txt  ww.txt

修改hooks脚本,进行同步

chmod 755 /application/svndata/sadoc/hooks/post-commit

[root@localhost svndata]# more /application/svndata/sadoc/hooks/post-commit

#!/bin/bash

REPOS="$1"

REV="$2"

export LC_CTYPE="en_US.UTF-8"

export LC_ALL= 

LOGPATH="app/log"

[! -d ${LOGPATH} ] && mkdir ${LOGPATH} -p

##update content from svn 

SVN=/usr/bin/svn

$SVN  update --username wyb --password 123456 /data/www/

if [ $? -eq 0 ]

then

/usr/bin/rsync  -az  --delete  /data/www/   /tmp/

fi

[root@localhost svndata]# touch wwwwwwwwwwwwwwwww

[root@localhost svndata]# svn add wwwwwwwwwwwwwwwww 

A         wwwwwwwwwwwwwwwww

[root@localhost svndata]# svn commit -m "wwwwwwww"

Adding         wwwwwwwwwwwwwwwww

Transmitting file data .

Committed revision 13.

[root@localhost svndata]# svn  ls   svn://192.168.2.48/sadoc/   --username=wyb  --password=123456  --verbose

13 wyb                   Oct 23 15:11 ./

9 wyb                15 Oct 23 11:34 a.html

12 wyb                 0 Oct 23 15:09 asd.txt

7 wyb                 0 Oct 23 11:28 b.html.txt

8 wyb                 0 Oct 23 11:30 c.html.txt

11 wyb                 0 Oct 23 15:08 hh.txt

1 wyb              8011 Oct 23 09:49 svn.txt

4 wyb                 0 Oct 23 10:37 ww.txt

13 wyb                 0 Oct 23 15:11 wwwwwwwwwwwwwwwww

[root@localhost svndata]

[root@localhost svndata]# ls /tmp/

a.html  asd.txt  b.html.txt  c.html.txt  hh.txt  svn.txt  ww.txt  wwwwwwwwwwwwwwwww


写钩子脚本的注意事项:

a,钩子脚本的权限要允许svn执行,一般可以设置 chmod 755 post-commit 

b,钩子脚本尽可能定义环境变量,主要是用过的命令的路径,因为svn考虑安装的问题,不会调用系统环境变量,所以如果发现手动执行post-

commit没有问题,但是自动还有可能无法执行 

c,这个笔记的案例脚本,在svn update之前先要手动checkout一份出来,还有尽可能要加上用户密码,如果只是手动一样会更新,但是如果触发可能就会不能更新

#####################################################

2SVN 远程同步程序代码到远端的WEB服务器参考方法

####################################################### 

案例二:

利用pre-commit 限制上传文件扩展名及大小.

###############################################################

2.1代码上线的解决方案,案例

2.1.1小型格式的代码上线案例

svn  hooks_svn

2.2 中型企业上线解决方案:

svn  hooks_svn_02

2.3大型企业上线解决方案:

ITIL  BSWx

svn  hooks_服务器_03

集群环境中分批更新

代码上线解决方案注意事项:

1,上线的流程里,办公测试环境---》IDC测试环境----》正式生产环境,所有环境软件版本均应统一,否咋后患无穷;

2,开发团队小组办公内部测试环境(该环境由开发小组维护,或者定时自动更新代码),代码有问题返回给某个开发人员

3,有专门的测试工程师,程序有问题直接返回给开发人员

4,IDC测试有测试和运维参与,叫IDCtest,进行程序压力测试,有问题直接返回给开发人员。无问题上生产环境

5,数台服务器代码分发上线方案例子(Java程序)::::::

a,假设同业服务器有6台,分为2组,A组三台,B组三台,先对A进行平滑下线,B组正常提供服务,避免影响业务

b, 下线是通过脚本将A组的服务器从RS池(LVS,NGINX,HAPROXY,F5)等负载均衡器平滑提出,避免负载均衡器将请求送给A组服务器,(此时在流量低峰期)

举报

相关推荐

React Hooks —— ref hooks

Hooks

pytest:hooks

react hooks

React Hooks

Git hooks

0 条评论