网站导航
登录信息

用户名 :

密 码 :

验证码 :

忘记密码

请输入您的Email地址及用户名,系统确认匹配后会将密码重置地址发送到您的邮箱。

用户名:

Email:

注册帐号

注册及创建本站帐户只需5秒。

点击创建帐户

通过自定义SVN钩子脚本远程地址实现提交实时触发事件功能
0000-00-00

本站目前新增可让用户自行定义在SVN在COMMIT时去访问的一个远程地址的功能,用户可通过这个远程地址的脚本写入自己需要执行的程序,从而实现远端脚本的同步触发。本功能作者已经通过一个月的运行测试并使用正常稳定,目前正式公布给本站其它用户使用。本功能的示意简图如下:

本功能的原理是基于SVN自带的钩子脚本功能。

什么是版本库钩子?官方文档解释如下:

钩子是通过版本库事件触发,例如新版本的创建或一个未版本化属性的修改。一些钩子(叫做“pre hooks”)在事件发生前运行,可以用来报告发生了什么以及防止它发生。还有一些钩子(“post hooks”)在版本库事件之后发生,只是用来报告。每个钩子能够获得事件的足够信息,例如提出的(或完成的)版本库修改细节,还有触发事件的用户名。

这一段解释翻译得不是太适合我们中国人看得懂,不看也罢。下面我以本人的实际使用情况,手把手教会大家如何使用这个非常实用的SVN进阶功能。

我能使用这个钩子脚本干什么?

其实很简单,除了目前本站已经提供的RSS订阅版本库、EMAIL通知其它用户的功能外,其实我们还可以在每次COMMIT的时候执行其它的事情。作为一个Web开发工程师,我经常会遇到这样的需求和苦恼:为什么每次当我COMMIT完源代码后,还需要到服务器上面去执行一次“svn up”,服务器上的版本才会更新到最新版本。在频繁更新的开发中,这种操作实在烦琐,因为每次还要登录到服务器上去运行这条命令:svn up。

现在,利用SVN的钩子脚本功能,这步也可以自动做到了!你只需要COMMIT,服务器上的程序版本就同时会更新到最新版本。

第一步:为你的程序加上一个执行SVN更新的脚本

以PHP为例,我首先需要增加一个比如命名为svn_update.php的文件。这个文件里只需包含以下代码:

system("svn up --username $username --password $password");  

?>

注:$username和$password需要替换为你的SVN用户名和密码的明文

懂PHP的朋友可能看明白了,这其实是去调用系统的“svn up”命令。当然,前提是你的服务器上需要支持“svn”这个命令,如果不支持的话需要安装,这里不再详述。

第二步:检查你的服务器文件权限,确认这个脚本可以执行成功

注:Windows Server用户可以跳过这步。

有经验的Linux用户应该知道,在Linux下文件权限是按照用户区分得非常严格的。所以执行这个svn_update.php时,需要确保你目录下的所有文件都能被apache(或其它HTTP server)用户有写权限。

一个简单的办法是:chmod -R 0777 *

一个负责任一点的办法是:chown -R www-data:www-data(以ubuntu linux,apache为例)

另外可能你需要让apache(或其它HTTP server)用户去记住svn up执行时的用户名和密码。具体办法是:

  • 先切换到apache用户:su www-data
  • 然后执行一次:svn up --username $username --password $password(注:$username和$password需要替换为你的SVN用户名和密码的明文)
  • 系统会提示你是否记住密码,打yes(确保apache用户对该目录有写权限)
  • 大功告成

第三步:测试是否可以成功执行SVN更新脚本

假设我的服务器地址是:http://www.svnchina.com

那我的脚本运行URL则为:http://www.svnchina.com/svn_update.php

请注意:这个地址一定要是可以在互联网访问的公众地址,这样SVN服务器才能触发得到啊

那在浏览器上输入这个URL,回车,如果你见到的结果如下图,则恭喜你,运行成功了:

如果你的浏览器运行的结果是一片空白,那是没有成功执行的原因(如果是Linux服务器,那很可能是因为文件权限的问题或没有成功记住密码)。请检查前3步。

第4步:设置钩子脚本地址

这也是最简单的一步,进入SVNchina.com,进入我的项目,进入相关的项目展示页,在如下位置输入你的远端脚本地址即可:

现在你的开发将爽多了,每次COMMIT同时也等同于触发了相关位置版本库的Update。SVN是不是比FTP爽多了?

这个功能还可以有其它更多更丰富的应用,留待你来开发吧。

注:由于本功能涉及到一些安全性以及服务器网络资源的占用,因此目前仅开发给高级收费用户使用。声明:本功能仅允许用来正常触发远程脚本的执行,如果一旦发现该功能用于其它滥用或恶意目的的操作,我站将可收回用户权限甚至删除用户。另外,在体验期间,收费用户可以有一个月的试用时间,但一个月后收费用户将会关闭该功能。

如有任何问题,欢迎给我们发留言,我们将以Email形式收到。