用SVN的钩子实现SVN与WEB测试服务器同步

多人开始使用subversion之后,就想着,要建立一个测试用的服务器,不需要把文件update到本地再进行测试。

原理:基于subversion的钩子,即hook(在每个版本库下有hooks文件夹,里面有很多钩子程序)。在subversion执行一个操作时, 那会相应的首先去调用相关的钩子程序(如果存在的话)。那么实现一个同步的测试服务器,我们只需要在一个用户执行完毕一个commit操作之后,让钩子程序去自动更新测试服务器的文件即可。通过这个思路,我们需要作的就是建立一个post-commit的钩子
用SVN的钩子实现SVN与WEB测试服务器同步_第1张图片

1.页面同步按钮触发

svn_update.sh

#!/bin/sh
SVN=/usr/bin/svn
WEB=$1
WWWROOT=/data/www/wwwroot/test.com/
SVNTMP=/data/www/svntmp/test.com/

if [ ! -d "${WWWROOT}${WEB}" ]; then
      echo "arg error"
      exit
fi

#export LANG =en_US.UTF-8
$SVN update $SVNTMP$WEB  --username *** --password **
/cp -rv $SVNTMP$WEB $WWWROOT
find $WWWROOT$WEB -type d -name ".svn" | xargs rm -rf
chown www.www $WWWROOT$WEB -R

php执行shell,网页可以访问

<?php
if (isset($_POST['Submit3']) &&$_POST['Submit3']){
    shell_exec("./update_develop_svn.sh");// exec("./update_develop_svn.sh",$output);
}
//$cmd = "sudo /usr/local/apache/bin/htpasswd -b /data/svn/passwd {$username} {$userpass}";
//shell_exec($cmd);
?>
<form name="form3" method="post" action="">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <label>
        <input name="Submit3" type="submit" id="Submit3" value="同步" onclick="return confirm('确认需要同步?')">
    </label>
</form>

2.windows自动更新

On a Windows system, you should name the hook program 'post-commit.bat' or 'post-commit.exe',

在svn项目demo\hooks下面,新建post-commit.bat文件

@echo off
"C:\svn\bin\svn.exe"  update "c:\htdocs\demo" --quiet  --username XXX --password XXXX
3. linux自动更新

 项目库的 hooks/ 目录下新建 post-commit 文件

#!/bin/sh
/usr/bin/svn up --username=danny --password=123456 --no-auth-cache --non-interactive /data/webwww/demo > /dev/null

让post-commit有执行的权限,并将checkout的项目相关权限和宿主改一下

chmod 777 post-commit
chown -R www:www ./.svn
chown -R www:www ./.svn/*
chown -R www:www ./.svn/
chown -R www:www ./.svn
chown -R www:www ./

 以上的实现原理参考hooks/post-commit.tmpl文件

 
 
 
 
 

你可能感兴趣的:(Web)