出于管理需要,也需要在公司内部实现自动发布流程。当开发机提交SVN代码之后,自动同步到测试服务器进行测试。

网络的拓扑简化为:

1台核心SVN服务器,使用的svn管理软件为Subversion Edge3.2版本,Subversion核心版本为1.8.x,内网IP为:xx.xx.xx.54;

1台Web服务器,CentOS6.5 x64,内网IP为:xx.xx.xx.53。

基本的操作流程如下:

一、创建版本库:

在Subversion Edge中创建版本是比较简单的。假设创建好的版本库为:http://xx.xx.xx.54/svn/assistant/

权限设置等,可参见其他相关文章。

二、目录、权限设置:

自动发布的原理,其实只是在于:当开发机提交更新之后,脚本会自动执行某段代码,将代码更新到某个副本中。如果svn服务器和wen服务器在一台电脑中,这步操作已经完成自动发布(准备下面的1,2步);如过svn服务器和web服务器不在一台电脑中,则还需要使用其他办法将更新文件,同步到web服务器中。

1、在 svn服务器中,创建 "/data/assistant/"目录;

2、将版本库代码,"checkout"至该目录;

3、在web服务器中,创建"/web/assistant/"目录;

4、设置ssh权限,在使用rsync时,不需要手工录入密码;

5、建议将web服务器的web用户权限,在svn种也创建一份,这样一来,rsync可以直接将权限传递过去,无需再次操作(假设"webgroup:webuser")。

#、创建svn副本
mkdir /data/assistant/
#、签出代码
/csvn/bin/svn checkout http://xx.xx.xx.54/svn/assistant/ /data/assistant/
#、设置安全同步密钥,建议操作完之后,先执行一下rsync输入一次密码,则不需要再次输入了
ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub xx.xx.xx.
#、设置权限
chown webuser:webgroup -R /data/assistant

三、复制并修改"post-commit"脚本:

Edge操作钩子比较简单,根本不需要考虑权限问题,只需要在"Hook Scripts"中,选中'post-commit.tmpl",再点击"copy",复制为"post-commit"文件即可。

编辑内容如下:

#!/bin/sh

REPOS $
REV $ #指定命令路径
SVNPATH=/data/csvn/bin/svn
SVNLOOKPATH=/data/csvn/bin/svnlook
RSYNC=/usr/bin/rsync #定义环境变量
LOCALCOPY=/data/assistant/
REMOTEIP=/web/assistant/
REMOTEIP="172.16.6.53"
EXCLUED=/data/csvn/exclude.list
LOG=/tmp/rsync_web_server.log
CHANGE=$($SVNLOOKPATH changed -r $REV $REPOS) #设置输出字符集,避免乱码
export LANG=en_US.UTF- #更新本地副本
$SVNPATH update $LOCALCOPY --username publisher --password Q1w2e3r4t5 if [ $? == ] && [ $CHANGE =~ "branches"]; then
echo `date` >> $LOG
echo "##############################" >> $LOG
echo $CHANGE >> $LOG
#修改更新文件的权限
chown -R webuser:webgroup $LOCALCOPY
$RSYNC -vaztpH --timeout= --exclude-from=$EXCLUED $LOCALCOPY/ root@$REMOTEIP:$REMOTEIP >> $LOG
else
echo "no update file." >> $LOG
fi

1、指定svn路径的原因在于,一般的centos通过yum安装的svn,是1.6.x版本,而edge是1.8.x版本,会导致更新时提示版本不一致,因此直接指定为edge自带的svn命令;

2、EXCLUED是设置的排除文件,包含在rsync同步时无需同步的文件或者目录,基本内容如下:

.svn/
.DS_Store
images/

3、目前的使用,仅限于提交后触发的post-commit脚本,实际上,当你查看版本库的hooks目录时,会发现其他很多事件的脚本,只是对于我们的应用场景来说,还不需要那么严谨,其余的,遇到再说吧;

4、理论上,目前的方式,当集中管理的项目较多时,会在svn上产生较多的svn副本,这对svn服务器也是一个压力。更优的方案,应该在于当触发提交时,请求对应web服务器的某个脚本,主动去拉取代码至对应web服务器,应该是更优的做法。

SVN利用Hooks自动发布网站的更多相关文章

  1. 一看就会之—利用IIS服务发布网站(实践篇)上

    转自:http://blog.csdn.net/zwk626542417/article/details/9796259 概述 IIS全称为互联网信息服务,是由微软公司提供的基于运行Microsoft ...

  2. vbscript调用WMI一键式式发布网站

    作为.net开发,在window环境下,不得不熟悉些脚本语言,来减轻些日常开发中所遇到的一些繁杂的事情,比如自动发布网站,自动发布网站等等. WMI windows管理程序接口,可用各种与语言调用,方 ...

  3. Python自动发布Image service的实现

    使用Python自动发布地图服务已经在上一篇博客中讲到,使用Python创建.sd服务定义文件,实现脚本自动发布ArcGIS服务,下面是利用Python自动发布Image service的实现. -- ...

  4. php利用svn hooks将程序自动发布到测试环境

    利用svn hooks将php程序自动发布到测试环境 复制仓库hooks目录下的post-commit.tmpl为post-commit cp post-commit.tmpl post-commit ...

  5. 设置SVN hooks实现自动发布

    # CentOS下安装SVN yum -y install subversion svnserve --version cd /home/ mkdir svn cd svn/ /usr/bin/svn ...

  6. Jenkins持续集成(下)-Jenkins部署Asp.Net网站自动发布

    环境:Windows 2008 R2.Jenkins2.235.1.Visual Studio 2017: 概要 前面写过一篇文章,<自动发布-asp.net自动发布.IIS站点自动发布(集成S ...

  7. svn 版本管理与自动部分发布

    作为团队开发项目时,会遇到项目的版本管理,测试部署与发布部署,下面是摘至他人的关于版本管理和自动部署的方案. svn自动部署的实现: 使用svn的hook功能 1.在版本库的hooks目录下面,有一些 ...

  8. svn 版本管理与自动部分发布(转)

    作为团队开发项目时,会遇到项目的版本管理,测试部署与发布部署,下面是摘至他人的关于版本管理和自动部署的方案. svn自动部署的实现: 使用svn的hook功能 1.在版本库的hooks目录下面,有一些 ...

  9. SVN——Jenkins自动发布

    最近公司项目处于开发阶段,很多功能开发完后就需要发布到测试环境等待测试去验收,这个时候如果手动更新网站的话,是很费时费力的. 于是乎,我们做成了自动发布,这样我们只管提交代码到SVN就行了,发布由软件 ...

随机推荐

  1. dede 设置为全动态浏览

    将织梦所有栏目设置为“使用动态页”,可以再建立栏目时选择“使用动态页”:也可以执行下面的SQL语句.update dede_arctype set isdefault=-1 将网站所有文档都设置为“仅 ...

  2. zoj 1149 Dividing

    1到6的卡分别各有有限制的张数,问能不能恰好分,总张数不能超过20000. 很明显是多重背包问题,上去果写了个三重循环,然后就T了,重新打开背包九讲,找到了多重背包的二进制拆分优化,把其中一维n的复杂 ...

  3. CODEVS1047 邮票面值设计

    题目描述 Description 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤40)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大值MAX,使在1-MAX之 ...

  4. int指令(软件中断指令)

    INT(软件中断指令)是CALL指令的一种特殊形式.call指令调用调用的子程序是用户程序的一部分,而INT指令调用的操作系统提供的子程序或者其他特殊的子程序. 中断服务子程序和标准过程的最大区别是 ...

  5. Android中的Menu

    Android中的设置按钮:长按或点击菜单键 1.长按选项: 布局文件: <LinearLayout xmlns:android="http://schemas.android.com ...

  6. jsoup_解析任意网站,做任意网站客户端

    jsoup是一个解析网页源码的开源库,他能按照给定的规则提取出一个网页中的任意元素,和其他网页解析库不同的是,他提取网页内容的方式和css.jquery的选择器非常相似.因此如果你懂得前端的知识,只需 ...

  7. CSS自学笔记(12):CSS3文字特效

    在CSS3中新增了多个文本属性,同样有了这些属性我们在进行问题特效处理时,就尽可能少的用到其他软件去制作特效文字了. 在以前使用CSS进行web开发的时候,必须使用计算机上安装好的字体,如果有些用户的 ...

  8. Nlog、elasticsearch、Kibana以及logstash

    Nlog.elasticsearch.Kibana以及logstash 前言 最近在做文档管理中,需要记录每个管理员以及用户在使用过程中的所有操作记录,本来是通过EF直接将操作数据记录在数据库中,在查 ...

  9. 以前用Delphi写的CSDN免积分下载器

    用了AlphaControl皮肤组件,原理很简单,就是CSDN的一个漏洞.我主要是使用WinInet来获取相关信息,然后从里面分析出真实的下载URL,同时我也是用了AES加密.function Get ...

  10. 浅析C++内存分配与释放操作过程——三种方式可以分配内存new operator, operator new,placement new

    引言:C++中总共有三种方式可以分配内存,new operator, operator new,placement new. 一,new operator 这就是我们最常使用的 new 操作符.查看汇 ...