标签:svn -- hooks commit root Oct
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小型格式的代码上线案例
2.2 中型企业上线解决方案:
2.3大型企业上线解决方案:
ITIL BSWx
集群环境中分批更新
代码上线解决方案注意事项:
1,上线的流程里,办公测试环境---》IDC测试环境----》正式生产环境,所有环境软件版本均应统一,否咋后患无穷;
2,开发团队小组办公内部测试环境(该环境由开发小组维护,或者定时自动更新代码),代码有问题返回给某个开发人员
3,有专门的测试工程师,程序有问题直接返回给开发人员
4,IDC测试有测试和运维参与,叫IDCtest,进行程序压力测试,有问题直接返回给开发人员。无问题上生产环境
5,数台服务器代码分发上线方案例子(Java程序)::::::
a,假设同业服务器有6台,分为2组,A组三台,B组三台,先对A进行平滑下线,B组正常提供服务,避免影响业务
b, 下线是通过脚本将A组的服务器从RS池(LVS,NGINX,HAPROXY,F5)等负载均衡器平滑提出,避免负载均衡器将请求送给A组服务器,(此时在流量低峰期)
标签:svn,
--,
hooks,
commit,
root,
Oct
From: https://blog.51cto.com/u_15130867/7147203