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

暂时记下,此文章内容稍后验证。

前言:其实利用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 variableSVN=/usr/bin/svnWEB=/home/test_nokia/RSYNC=/usr/bin/rsyncLOG=/tmp/rsync_test_nokia.logWEBIP="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 followingif [ $? == 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 [email protected]$WEBIP:/www/ >> $LOGfi

以上是具体的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_Storeimages/

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

利用SVN钩子同步程序注意事项,布布扣,bubuko.com

时间: 2024-10-20 11:01:06

利用SVN钩子同步程序注意事项的相关文章

如何利用svn自动同步更新到网站服务器

我们最终的目的是:当本地提交后,SVN服务器自动更新服务器端指定WEB目录内的文件 实现方法: 找到服务器端 SVN版本库所在的目录(目录名称是Repositories),这个目录是在安装VisualSVN Server设置的,根据你安装时的设置找到Repositories这个目录,在这个目录下面找到你创建的项目目录,在项目目录下面找到hooks目 录,在此目录中创建一个名为post-commit.bat的批处理文件,内容如下: @echo off "D:\VisualSVN Server\bi

centos 6.8 设置svn钩子同步至web目录

1.在web目录创建项目目录 mkdir ./opt/wwwroot/项目名称 2.使用svn检出项目文件 svn checkout svn://localhost:/项目名称 3.设置svn库中钩子实施同步操作 cd ./opt/svn/repos/项目名称/hooks #进入svn项目钩子管理目录 cp post-commit.tmpl post-commit #复制钩子文件使用post-commit chmod 755 post-commit #赋予权限 3.打开post-commit文件

linux自整理SVN搭建及与站点根目录实现钩子同步

一,当使用了svn版本控制系统后每个目录下都会有一个.svn目录存在,开发完当交付产品或者上传到服务器时一般要把这些目录删除. find . -type d -name ".svn"|xargs rm -rf 二,开始搭建SVN服务 1,mkdir /www/svndata                 //建立版本库目录 svnserve -d -r /www/svndata/ 2,svnadmin create /www/svndata/site              //创

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四.

LINUX环境下SVN安装与配置(利用钩子同步开发环境与测试环境)

安装采用YUM一键安装: 1.环境Centos 6.6 2.安装svnyum -y install subversion 3.配置 建立版本库目录mkdir /www/svndata svnserve -d -r /www/svndata 4.建立版本库 创建一个新的Subversion项目svnadmin create /www/svndata/project 5.版本库配置 进入对应的版本库如nilrxx,里面有一些自动给生成的文件.在conf目录下就是我们需要配置的三个文件:authz 

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

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

使用SVN钩子运行PHP更新服务器代码的注意事项

想通过本地提交代码到SVN服务器,同时同步测试服务器的代码 使用SVN钩子,运行服务器的php文件 代码如下: <?php header("Content-Type: text/html; charset=utf-8"); header("Cache-Control:no-cache,must-revalidate"); $username = '用户名'; $password = '密码'; $target_dir = '路径'; exec("su

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.

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