说明:为了集成bugfree和svn,在bugfree官网找到部署的方法,过程虽然简单,但有一些细节还是必须要注意的。测试了一个星期,期间把钩子脚本测试了几遍,PHP脚本测试了N遍,debug工具都装上了,终于搞清楚了这几个脚本到底是怎么回事,并分析清楚了它的工作原理。拿出来和大家分享一下。
一 安装准备:
Php5
BugfreeforSVN
配置环境
操作系统版本:RHEL x86_64 AS 4.6
二 安装php5
说明:在svn的钩子脚本中用到了php的-r选项,该选项只有5以上的版本支持,如果你的PHP的版本是4,那么将无法运行该脚本。
tar xvjf php-5.5.6.tar.bz2 cd php-5.5.6 ./configure --prefix=/usr/local/php5 --with-mysql \ --with-apxs2=/usr/local/apache2/bin/apxs make && make install
三 将svn_ci.php和class.http.php放在同一个目录下
linux:/tmp/BugFreeforSVN% tar xvzf BugFreeforSVN.tar.gz
解压后有4个文件:class.http.php svn_ci.php post-commit post-commit.bat(这个是windows下的钩子脚本,我这里不需要,可以删除)
将下面2个文件放在同一目录下,否则无法调用
linux:/tmp/BugFreeforSVN% ls class.http.php svn_ci.php
四 修改post-commit钩子脚本
linux:/home1/subversion/project/data/hooks%more post-commit #!/bin/bash REPOS="$1" REV="$2" PHP_EXE='/usr/local/php5/bin/php' CHECK_IN_PHP='/tmp/BugFreeforSVN/svn_ci.php' SVN_LOOK_EXE='/usr/local/subversion/bin/svnlook' AUTHOR=$($SVN_LOOK_EXE author -r $REV$REPOS) DATE=$($SVN_LOOK_EXE date -r $REV $REPOS) CHANGED=$($SVN_LOOK_EXE changed -r $REV$REPOS) LOG=$($SVN_LOOK_EXE log -r $REV $REPOS) N=$($PHP_EXE -r 'echo chr(0x04);') #这里的-r选项只有PHP5才支持,所以要装5 $PHP_EXE $CHECK_IN_PHP "Changeset [${REV}] by $AUTHOR,$DATE$N$LOG$N$REV$N$CHANGED"
五 修改svn_ci.php
define('API_NEWLINE', chr(0x03));
define('API_DEVIDER', chr(0x04));
define('API_KEY', 'YOUR_KEY');
define('API',"http://10.10.10.1/bugfree/api.php");
define('USER_NAME', 'admin');
define('USER_PASSWORD','1c8fd251fcb0c3ad91178fd9782c7cc7'); #整了3天,其实问题就在这儿。从debug信息中拿到的md5密码。用linux的md5sum加密出来的不同,是:“88a0aa9615ea4f01e584dea259a5161d”。这个密码是在bugfree中设置账号和密码后,自动用md5加密后的密码。
define('VIEWVC', 'http://10.10.10.2/viewvc/');
修改第61行如下:(你也可以不修改)
$note .= ' [url=' . VIEWVC . '][/url]';
六 修改class.http.php
默认是不用修改的,但我们装的是PHP5,当执行:
linux:/home1/subversion/project/data/hooks%./post-commit /home1/subversion/project/data 18 > /home/a.txt
会报错:
linux:/home1/subversion/project/data/hooks%more /home/a.txt Deprecated: Function eregi() is deprecatedin /tmp/BugFreeforSVN/class.http.php on line 900
修改如下:
linux:/home1/subversion/project/data/hooks%vim +900 /tmp/BugFreeforSVN/class.http.php 旧内容: if(!eregi($match ="^http/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$", $headers[0],$matches)) 修改为: if(!preg_match($match ="/^http\/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$/i", $headers[0],$matches))
原因:
我安装的PHP是5.5.6,由于PHP在5.3及以上的版本已经废弃了eregi()函数,改用preg_match()+//i参数替代;
另外,在http后面有一个/,需要转义,所以加了一个\,否则,报错Warning: preg_match(): Unknownmodifier '[' in /tmp/BugFreeforSVN/class.http.php on line 900
七 提交的方式
% svn ci -m "fix bug #346"
注意log中的空格。这些步骤bugfree官网有说明。这里就不累述了。
提交后会在bugfree的网页中看到提交信息。
转载于:https://blog.51cto.com/bblxlit/1343092