头部背景图片
小畅的学习笔记 |
小畅的学习笔记 |

SVN实现Web服务器自动更新(Windows平台)

很多人都把SVN服务器搭建在正式服务器上,commit后,需要在测试服务器先测试一下,这时候,就需要在测试环境进行update操作。问题是,commit后,测试环境如何实现自动更新呢?研究了一天,终于有了结果

网上有很多中实现SVN自动更新的方法,这里记录了两种Windows平台下,实现SVN上传代码,自动更新web服务器内容的方法,供大家学习~

1. 设置钩子,使得VisualSVN Server可以自动发布配置部署svn代码到web目录服务器上线

SVN钩子有很多种:

  • post-commit 在提交完成成功创建版本之后执行该钩子,提交已经完成,不可更改。
  • pre-commit 提交完成前触发执行该脚本
  • start-commit 在客户端还没有想服务器提交数据之前,及没有建立Subversion transaction 之前。

仓库->右键->Properties->Hooks,添加一个post- commit文件;当有commit动作发生时(提交到SVN Server时)就会执行这个post-commit文件,在该文件实现数据的复制。
Image1.png

适用条件:
SVN Server与测试用的Web Server在同一台Windows系统服务器上,SVN Server使用的是VisualSVN,Web Server使用的是Apache。项目的名称为faqSVN,客户端使用TortoiseSVN。首先创建一个文件夹,进行checkout,输入需要用户名和密码,将test项目取出到该文件夹中。
Image2.png

找到SVN Server的Repositories目录,在Repositories/test/hooks文件夹中创建post-commit.bat,在其中写入命令:

"C:\Program Files\VisualSVN Server\bin\svn.exe" update "D:\www\test" --quiet --username name --password pwd(即执行svn update命令,请自行替换用户名和密码)

Image3.png

也可以这样写

@echo off
SET REPOS=%1
SET REV=%2
SET DIR=%REPOS%/hooks
SET PATH=%PATH%;
SET WORKING_COPY=C:\lichang\faqSVN
“C:\Program Files\VisualSVN Server\bin\svn.exe” update %WORKING_COPY% –username admin –password 123456

Image4.png
注意:修改完钩子文件,我们需要重启一下VisualSVN
Image5.png

post-commit文件设置完成后,我们可以测试一下,当我们在客户端提交SVN文件的时候,VisualSVN Server会通过这个钩子文件,将SVN中更新的内容自动update到我们本地部署的faqSVN文件夹中

2.在Web服务器种写一个批处理文件svnUpdate.bat来进行svn update操作

有的时候,我们操作SVN服务器不是很方便,那么我们可以在Web服务器上进行一些操作来实现SVN自动更新:
首先,在Web服务器种写一个批处理文件svnUpdate.bat来进行svn update操作

::SVN自动update

::待更新SVN目录
SET WORKING_COPY=D:/wwwroot
svn update %WORKING_COPY%

::pause

文件很简单,就两条命令。
WORKING_COPY是你测试环境的网站目录,这里是D:/faq,请自行修改,当然你必须在该目录下checkout先。
如果用户名或密码更改了,你应该手动进行一次验证,并保存验证结果。

下一个问题是怎么调用这个bat文件呢?如果正式和测试环境,都在同一只机器上,那么直接编写HOOK,调用这个文件就可以。
但如何不是同一个机器呢?一个比较简单的办法,就是在测试环境上,每经过一个时间间隔进行更新操作,我们可以编写一个vbs脚本,每隔15秒调用一次svnUpdate.bat。采用vbs调用有一个好处,可以隐藏弹出的cmd.exe窗口。我们新建一个文件,callSvnUpdate.vbs,内容如下:

'指定时间间隔调用.bat文件
'停止脚本请在任务管理器结束wscript.exeSet ws=wscript.createobject("wscript.shell")
dim bat
'需运行的文件
bat="cmd.exe /c svnUpdate.bat"
do
'0表示不显示窗口,1显示,调试用
ws.run bat,0
'每15秒运行一次
wscript.sleep 15000
loop

将两个文件放于web服务器的同一目录中,双击运行callSvnUpdate.vbs即可
Image6.png

Lililich's Blog