`

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

阅读更多

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

原帖:http://www.ohlinux.com/?p=322

前言:其实利用SVN实时同步到WEB服务器即时展现出来的文章已经到处都是,但是我在做的时候 还是有不少的小问题,很多文章也没有提出来过,还有同步也是,我还是记录下自己做过的尤其是一些细节,时间一长又会忘掉了。

同步程序思路:用户提交程序到SVN,SVN触发hooks,按不同的hooks进行处理,这里用到的是post-commit,利用post-commit到代码检出到SVN服务器的本地硬盘目录,再通过rsync同步到远程的WEB服务器上。

知识点:
1、SVN的hooks
# start-commit 提交前触发事务
# pre-commit 提交完成前触发事务
# post-commit 提交完成时触发事务
# pre-revprop-change 版本属性修改前触发事务
# post-revprop-change 版本属性修改后触发事务
通过上面这些名称编写的脚本就就可以实现多种功能了,相当强大。
2、同步命令rsync的具体参数使用
3、具有基个语言的编程能力bash python perl都可以实现

post-commit具体实现细节
post-commit脚本

#!/bin/sh
# -------------------------------------------------------------------------------
# Filename:    post-commit
# Revision:    1.0
# Date:        2009/03/20
# Author:      Ajian
# Email:       ajian521#gmail.com
# Website:     www.ohlinux.com
# Description: WEB server with synchronization code by SVN
# -------------------------------------------------------------------------------
# Copyright:   2009 (c) Ajian
# License:     GPL
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# -------------------------------------------------------------------------------
#Version 1.0
#When users submit finished code, put the code up-to-date detection and synchronization to the WEB server, taking care not to include the delete operation.
 
#Set variable
SVN=/usr/bin/svn
WEB=/home/test_nokia/
RSYNC=/usr/bin/rsync
LOG=/tmp/rsync_test_nokia.log
WEBIP="192.168.0.23"
export LANG=en_US.UTF-8
 
#update the code from the SVN
$SVN update $WEB --username user --password  password
#If the previous command completed successfully, to continue the following
if [ $? == 0 ]
then
    echo ""     >> $LOG
    echo `date` >> $LOG
    echo "##############################" >> $LOG
    chown -R nobody:nobody /home/test_nokia/
    #Synchronization code from the SVN server to the WEB server, notes:by the key 
    $RSYNC -vaztpH  --timeout=90   --exclude-from=/home/svn/exclude.list $WEB root@$WEBIP:/www/ >> $LOG
fi

以上是具体的post-commit程序
注意事项:
1、一定要定义变量,主要是用过的命令的路径。因为SVN的考虑的安全问题,没有调用系统变量,如果手动执行是没有问题,但SVN自动执行就会无法执行了。
2、SVN update 之前一定要先手动checkout一份出来,还有这里一定要添加用户和密码 如果只是手动一样会更新,但自动一样的不行。
3、加上了对前一个命令的判断,如果update的时候出了问题,程序没有退出的话还会继续同步代码到WEB服务器上,这样会造成代码有问题
4、记得要设置所属用户,因为rsync可以同步文件属性,而且我们的WEB服务器一般都不是root用户,用户不正确会造成WEB程序无法正常工作。
5、建议最好记录日志,出错的时候可以很快的排错
6、最后最关键的数据同步,rsync的相关参数一定要清楚,这个就不说了。注意几个场景:
这里的环境是SVN服务器与WEB服务器是开的
把SVN服务器定义为源服务器 WEB服务器为目的服务器
场景一、如果目的WEB服务器为综合的混杂的,像只有一个WEB静态资源,用户提交的,自动生成的都在WEB的一个目录下,建议不要用–delete这个参数
上面这个程序就是这样,实现的是源服务器到目的服务器的更新和添加,而没有删除操作,WEB服务器的内容会多于源SVN的服务器的
场景二、实现镜像,即目的WEB服务器与源SVN服务器一样的数据,SVN上任何变化WEB上一样的变化,就需要–delete参数
场景三、不需要同步某些子目录,可能有些目录是缓存的临时垃圾目录,或者是专用的图片目录(而不是样式或者排版的)要用exclude这个参数
注意:这个参数的使用不用写绝对路径,只要目录名称就行 aa代表文件 aa/ 代表目录 ,缺点就是如果有多个子目录都是一样的名称 那么这些名称就都不会被同步
建议用–exclude-from=/home/svn/exclude.list 用文件的形式可以方便的添加和删除
exclude.list

.svn/
.DS_Store
images/

利用SVN的钩子还可以写出很多的程序来控制SVN 如代码提交前查看是否有写日志,是否有tab,有将换成空格,是否有不允许上传的文件,是否有超过限制大小的文件等等。

分享到:
评论

相关推荐

    SVNsync配置库同步说明

    - **注意事项**:同步过程中并不会同步用户的账户信息,因此需要在目标库中重新建立用户和权限规则。 ##### 6. 异常处理 - **常见错误**:在同步过程中可能会遇到各种异常情况,例如数据传输中断等问题。这时可能...

    svn主从搭建简单说明

    - 注意事项:从机B中的SVN2所属组和用户需设为nobody,确保主项目具有同步权限。 #### 三、总结 通过以上步骤,我们可以成功地搭建SVN的主从架构,实现实时的数据同步。这种架构不仅能提高系统的稳定性,还能为...

    SVN双机热备

    **注意事项** 1. **数据一致性**:确保同步过程中数据的一致性,避免出现冲突或丢失。 2. **安全性**:备份服务器应有与主服务器相同的安全措施,包括访问控制和防火墙设置。 3. **性能影响**:同步操作可能会对...

    SVN服务器和客户端(附原创配置说明)

    ### 四、注意事项 1. **备份** 定期备份SVN仓库,防止数据丢失。 2. **安全** 确保服务器的安全,避免未授权访问。使用SSL加密传输,增加用户认证机制。 3. **版本兼容性** 检查客户端和服务器之间的版本兼容...

    SVN小乌龟中文说明书

    #### 八、注意事项 - **文件冲突处理**:需小心操作,避免数据丢失。 - **忽略文件策略**:合理设置,避免误纳入不必要的文件。 - **版本日志维护**:保持日志信息清晰、准确,方便日后追踪变更。 通过以上内容,...

    WINDOWS下搭建SVN服务器端的步骤分享(Subversion)

    8. 使用钩子程序:如果需要在提交(commit)时自动执行某些操作,比如网站同步更新,可以使用SVN的钩子程序功能。 9. 安装教程的整理:网络上存在大量关于如何安装Subversion的教程,有的是官方提供的,有的是社区...

    Subversion库迁移及备份方案

    **注意事项:** - 在进行dump和load操作之前,务必确保所有正在使用的客户端都已经停止对库的操作,以避免数据不一致的问题。 - 如果需要迁移特定的项目或目录,可以在load时使用`svndumpfilter`命令来过滤。 #####...

    Subversion_Training - User.ppt

    使用建议与注意事项** 正确配置Subversion客户端,了解何时使用锁定、何时进行合并,以及如何处理冲突,都是提高团队效率的关键。 **11. Subversion配置** Subversion的配置涉及客户端和服务器端的设置,包括但...

    企业Java EE软件开发规范

    - `hooks`:SVN钩子脚本。 - `locks`:锁定文件。 - `src`:源代码目录。 - `dbcmis.`:开发包源代码。 - `code`:编码。 - `cpxm`:产品项目。 - `example`:示例。 - `htbh`:合同编号。 - `hybm`:会议...

    Git权威指南PDF完整版

    22.6 Topgit 使用中的注意事项/ 334 第23章 子模组协同模型/ 336 23.1 创建子模组/ 336 23.2 克隆带子模组的版本库/ 339 23.3 在子模组中修改和子模组的更新/ 340 23.4 隐性子模组/ 343 23.5 子模组的管理问题/ 345 ...

    TortoiseSVN-1.6.10说明书

    - **正在删除文件/文件夹**:删除文件或文件夹时需要注意的事项。 以上就是 TortoiseSVN-1.6.10 使用手册的核心知识点概述。TortoiseSVN 作为一款优秀的版本控制工具,为开发人员提供了强大的支持和便利的操作体验...

Global site tag (gtag.js) - Google Analytics