如何利用svn自动同步更新到网站服务器?

如何利用svn自动同步更新到网站服务器?,第1张

一、安装 SVN服务器程序

1.1运行 VisualSVN-Server-1.7.2.msi

1.2选择程序安装目录 和 SVN仓库目录

我程序装在 C:\Program Files\VisualSVN Server , SVN仓库目录在 D:\SVN

1.3 安装完成,立即运行

二、服务器配置

2.1服务器维护界面

2.2仓库目录默认的内容

2.3创建新项目wapzucom

2.3创建用户ve

2.4设置项目的用户权限

Properties Security Add 选择刚创建的用户 ve ok 应用 确认

三、创建测试服务器目录 D:\WWWROOT ,本地开发目录 D:\WORKDIR

四、将代码(D:\Code )导入到项目仓库

输入用户名 密码 并 勾选 保存认证

导入成功,并返回版本号1

五、导出项目代码到工作副本、测试服务器目录

同理,另外导出一份到测试服务器目录D:\WWWROOT (测试服务器的Apache目录指向该位置)

六、使用Hooks自动更新测试服务器代码D:\WWWROOT

6.1 进入 D:\SVN\wapzucom\hooks 建立 post-commit.bat 文件

编辑其内容 为"C:\Program Files\VisualSVN Server\bin\svn.exe" update "D:\www\test" --quiet --username name --password pwd

或者可参考下面这段话:

接下来最关键的一步是,我们需要找到服务器上安装的版本库的路径下面,以版本库名称命名的文件夹下,有一个名字为hooks的文件夹,在这个文件夹下建立post-commit.bat这样一个批处理文件,里面的内容如下:

@echo off

“D:\VisualSVN Server\bin\svn.exe” update “D:\Apache Software Foundation\Apache2.2\htdocs\soupei360″ _username XXXXX _password XXXXX

update前面的路径,是SVN服务器端程序的执行文件路径, 后面的是在服务器上同步到的目录的路径,username和password后面是刚才建立用户的用户名和密码,这段批处理的意思是,当我们在本地编写代码,然后通过svn的commit提交时候,首先提交到版本库中,然后版本库自动用这个批处理,把内容同步到服务器上之前指定的文件夹中,从而实现本地和远程同步操作。

两款SVN配置软件的具体配置教程可以通过搜索引擎得到具体设置方法,在此需要特意强调的是,一定要将本地和服务器上的目录都check out后,批处理才能够自动同步,服务器上的目标文件夹没有check out的话,即使设置的路径正确,也是不能同步的。

6.2 设置访问权限

我的电脑 右键 管理 服务和应用程序 服务 VisualSVN Server 右键 属性 登陆 添加访问权限 用系统管理员账号(我这里是user)

重启服务器

6.3测试Hooks工作是否正常

修改 index.php 状态

提交修改

最后打开D:\WWWROOT\index.php 可以发现代码已经被成功update

PS : 目录说明

C:\Program Files\VisualSVN Server 服务器安装目录

D:\SVN 仓库更目录

D:\WORKDIR 本地开发用的工作目录

D:\WWWROOT 服务器测试目录(Apache 指向该目录,即可实现工作目录内容修改后提交到SVN自动发布到测试目录)

您好,最简单的办法,将SVN服务器和测试服务器架设在同一台主机上,然后编辑SVN的post-commit钩子脚本,这个钩子是在每次成功commit后由SVN服务器自动调用执行的,存放在SVN服务器上该版本库的hooks文件夹下,编辑这个脚本,调用svn的checkout或者update,在SVN服务器主机上得到一个最新版的SVN客户端文件夹,接着通过这个脚本调用编译、部署指令,部署到测试服务器指定的文件夹,这就ok了。这样每次commit后就会自动发布一个新的测试版到测试服务器上。

当然了,也可以用操作系统的定时任务来做这个,来定时发布新测试版。

开发过程中,需要经常将SVN服务器上的代码同步到测试服务器上,一般做法,需要人工手工更新,这样很浪费工夫。下面的脚本为svn server的钩子程序,放在svn服务器上,只要代码更新,就会自动提交的测试服务器上。

使用条件:

1、SVN主机是WIN系统,如果要在LINUX的SVN主机上用,需要修改下面的代码为sh脚本,道理类似,代码不同。有需要的自行更改吧。

2、SVN主机上需要安装完整版的PUTTY安装包,而不是一个EXE.

3、测试服务器可以用putty登录

@echo off

setlocal enableDelayedExpansion

rem 本脚本实现将SVN服务器A(win环境)上提交的代码,自动上传(通过pscp)到测试环境的服务器B(linux)上,如果SVN在LINUX环境下,根据本代码自行调整。

rem svn服务器上版本库地址

set reposLoc=%1

set REV=%2

rem ---------------------------------------------------------------------- 配置开始

rem svn服务器上putty的路径

set puttyPath="D:\Program Files (x86)\PuTTY"

rem 测试环境putty登录的用户名

set username=root

rem 测试环境putty登录的密码

set password=password

rem 测试环境IP

set host=10.1.1.1

rem 测试环境代码根地址

set remoteRootPath=/var/www/htdocs/test

rem ---------------------------------------------------------------------- 配置结束

cd /d %puttyPath%

rem 遍历提交了的代码

for /f "tokens=2 delims= " %%i in ('svnlook changed %reposLoc%') do (

set "var=%%i"

svnlook cat !reposLoc! !var! > temp.txt

rem 替掉路径中的trunk

set newPath=!var:trunk=!

rem 通过pscp提交到测试服务器

echo y | pscp -l  !username! -pw !password! temp.txt !host!:!remoteRootPath!!newPath!

)

使用方法:

将上面的代码中配置区的变量修改,并将内容保存成bat文件,命名为post-commit.bat,放在SVN服务器上版本库的hooks目录下。提交代码试试看吧。经测试可行。

当然,这个脚本可以再做的牛比点儿,可以针对某个用户的提交做更新,也可以分析SVN提交时的日志,只有当日志中有特定的字符时更新。

另外,由于上面的脚本,只更新当前的提交,所以假设只针对某个用户的提交做更新时,不能只更新当前提交,这样其它用户的提交就落掉了,需要更新整个工程。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/372512.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-13
下一篇2023-05-13

发表评论

登录后才能评论

评论列表(0条)

    保存