SVN利用钩子实现代码同步到web目录

系统环境:windows server 2003web

web服务器:IISshell

 

第一步:svn服务器的安装apache

         因为使用的是windows服务器,因此我选择了最方便配置的VisualSVN服务器。到VisualSVN官网上下载VisualSVNmsi安装包,在windows服务器上安装,一路安装完成。windows

 

第二步:防火墙配置服务器

         打开“控制面板>Windows防火墙”。选择“例外”,打开“添加端口”svn

svn服务的默认端口3690添加到例外列表中,点击“肯定”[下图]post


再“肯定”使设置生效。测试

同上述方法把https/443端口加入防火墙例外列表,由于svn有两种访问方式svn协议和https协议。网站

 

第三步:测试svn服务是否已经畅通spa

         此处不讲svn的使用等等,不懂的本身百度。打开VisualSVN服务器在“Repositories”上右击新建版本库test。而后在“Users”上右击新建用户,此处能够建两个用户一个留给服务器端检出代码使用。另外一个为在客户端测试使用。暂定服务器端用户local密码123

客户端代码检出测试,代码检出成功。添加文件到目录中提交测试,提交成功。Svn服务已经成功搭建。

 

第四步:服务器端代码部署配置

服务器端获取代码到网站根目录是经过用户每次commit代码时触发post-commithook来实现的,所以下面要编写post-commit脚本,该脚本的做用是将版本库中的最新代码检出到网站根目录。首先在服务器上某个位置建立目录wwwtest做为网站根目录,配置好目录的权限,为了方便我使用的是最高权限,对于外网限制严格的长江大学来讲开发期的网站根目录设置最高权限是无伤大雅的,待到开发完毕再修改相应的权限即可。废话少说post-commit脚本以下:

?
1
2
3
4
5
6
@ echo on
SET REPOS=%1
SET USER=%2
SET SVN= "D:\Program Files\TortoiseSVN\bin\svn.exe"
SET DIR= "C:\Users\rex\Desktop\test"
(call %SVN% update %DIR% --username local --password 123 --non-interactive)

其中SVN变量是svn.exe主程序的路径,DIR为代码检出目录(即后面要用的wwwtest网站根目录)在服务器端的话可能并不在TortoiseSVN下,而是在VisualSVN的某个目录下,具体位置本身找。脚本编写完成后保存为post-commit.bat

对服务器端的网站根目录[上面提到的wwwtest目录]使用TortoiseSVN(随本身的习惯选择软件)执行首次的checkout命令。下面测试上述脚本的的正确性:首先在客户端经过svn上传一些文件到svn服务器,到服务器端执行上述脚本文件post-commit.bat。进入test目录检查是否将刚上传的文件导出到了wwwtest目录。(PS:如果用cmd执行post-commit.bat能够看到提示信息,可以很明确的看到是否执行成功)用脚本导出成功。下面将post-commit.bat脚本拷贝到服务器的Repositores/test/hooks文件夹下。重启svn服务,从客户端commit更新到服务器,那么网站根目录下面将会同步更新。

 

第五步:配置iis服务器,使wwwtest网站生效

         打开iis管理新建网站,将网站根目录指向服务器上wwwtest目录配置好网站各项参数,启动网站,访问测试成功。

配置完成!

以上转载于:http://my.oschina.net/duguying/blog/128877


注意的地方:

服务器上要安装TortoiseSVN,并且wwwtest网站目录下要checkout一份。

若是出现如下错误,

post-commit hook failed (exit code 1) with output:
svn: E120171: Unable to connect to a repository at URL 'https://xxxxx:443/svn/test'
svn: E120171: Error running context: An error occurred during SSL communication

进入TortoiseSVN\bin\visual svnserver.exe 注意是apache.羽毛图表那个.而后修改其权限SYSTEM权限.由于默认的network service没有权限写入。