如何在SVN提交后触发TortoiseSVN自动更新web服务器文件
SVN提交后自动触发Web站点更新实现方案
核心原理
利用SVN服务端自带的post-commit钩子实现提交后触发动作:该钩子会在代码提交到服务端、事务完全完成后自动执行,无需定时轮询。
操作步骤
第一步:优化现有更新脚本
建议将TortoiseSVN GUI工具替换为SVN命令行客户端,避免后台执行时弹出界面,修改后的脚本如下:
@echo off :: 静默执行SVN更新,无弹窗适合后台运行 svn update "D:\WebSite\Agent" --username 你的SVN账号 --password 你的SVN密码 --non-interactive :: 若必须保留TortoiseSVN调用方式,调整参数如下 :: "C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe" /command:update /path:"D:\WebSite\Agent" /closeonend:0 /notempfile exit /b
将脚本保存为auto_update_web.bat,手动执行一次验证更新功能正常。
第二步:配置SVN服务端post-commit钩子
- 进入SVN服务端对应版本库的根目录,找到
hooks文件夹 - 复制目录下的
post-commit.tmpl模板文件:- SVN服务端运行在Windows系统,重命名为
post-commit.bat - SVN服务端运行在Linux系统,重命名为
post-commit并给文件添加可执行权限
- SVN服务端运行在Windows系统,重命名为
- 编辑钩子文件,添加触发更新脚本的逻辑:
- 若SVN服务端和Web服务器为同一台机器,直接在钩子文件末尾添加脚本调用指令
call "D:\脚本存放路径\auto_update_web.bat" - 若SVN服务端和Web服务器为不同机器,可通过内网远程调用工具、或者在Web服务器搭建简易HTTP接口接收提交通知后执行更新脚本,钩子内添加对应调用指令即可
- 若SVN服务端和Web服务器为同一台机器,直接在钩子文件末尾添加脚本调用指令
- 提交测试:本地提交一次代码到SVN,验证Web站点文件是否自动更新
注意事项
- 运行SVN服务端的账号、运行更新脚本的账号,都需要拥有站点目录
D:\WebSite\Agent的读写权限,以及SVN仓库的拉取权限 - 不要在钩子脚本中添加耗时过长的逻辑,避免阻塞用户提交操作,复杂更新逻辑建议改为异步触发
内容的提问来源于stack exchange,提问作者jan
相关产品推荐
相关产品推荐

