文档章节

SVN部署http

jk409
 jk409
发布于 2015/11/25 19:26
字数 1841
阅读 192
收藏 4
点赞 0
评论 0

本文详细讲述了在Ubuntu上通过SVN进行业务部署。由于使用Apache服务模块的的实现和使用不同,本文的方案仅适用于ubuntu,如在其他环境下,请酌情部署。

本文介绍在代码提交时通过http访问SVN服务器,使用Mysql进行用户验证,并在提交完成后自动部署至服务器中。

主要步骤如下:

1、  安装Apache和Mysql:

执行

$ sudo apt-get install apache2 mysql-server  
执行
$ sudo /etc/init.d/apache2 start  
访问http://127.0.0.1,测试apache是否安装成功。如遇到端口冲突,可能是由于安装了其他的web服务器(如Nginx)占用了80端口所引起的,可以修改相应配置文件,换用其它端口。   
2、  安装subversion及对应Apache的服务器模块和MySQL用户认证管理模块:

$ sudo apt-get install subversion libapache2-svnlibapache2-mod-auth-mysql  
$ sudo a2enmod auth_mysql  
3、  创建subversion项目和版本库
可以将所有的版本库放置在一个目录下,如/var/www/svn,可以自定义。

$ sudo mkdir /var/www/svn  
然后可以创建两个版本库,如/var/www/svn/repos、/var/www/svn/repos1。

先创建两个文件夹

$ sudo mkdir /var/www/svn/repos  
$ sudo mkdir /var/www/svn/repos1  
然后再执行svnadmin命令创建两个仓库,注意使用--fs-type来指定创建fsfs版本库,默认情况下是创建Berkeley DB版本库

$ sudo svnadmin create /var/www/svn/repos --fs-type fsfs  
$ sudo svnadmin create /var/www/svn/repos1 --fs-type fsfs  
最后赋予www-data用户这些版本库的读写权限,因为通过apache服务器部署时需要读写该文件夹
$ sudo chown -Rwww-data /home/www/svn/repos  
$ sudo chown -Rwww-data /home/www/svn/repos1  
4、   创建用户验证数据库

创建进行用户验证的数据库

$ mysql -u root -p  
#创建一个数据库,用于进行用户验证   
mysql> CREATE DATEBASE svn;        
#使用该数据库   
mysql> USE svn;  
#创建一个用户表,包含name,password和groups这三列,且名字为主键   
mysql> CREATE TABLE user (  
name char(30) NOT NULL COMMENT '用户名',  
passwd char(32) NOT NULL COMMENT '密码',  
groups varchar(32) NOT NULL COMMENT ‘群组’,  
PRIMARY KEY (name) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;  
   
mysql> INSERT INTO user VALUE ('admin', MD5('admin'),’admin’);  
mysql> INSERT INTO user VALUE ('test', MD5('test'),’test’);  
需注意以下几点:

密码域一定要足够宽,本文将使用MD5密码(32字节),如果使用SHA1,则需要40字节。

必须设置groups字段,可以默认为其用户名,这样可以保证当使用mysql进行用户验证时,可以在apache的配置文件中指定群组,只有特定群组的人才能够访问该代码库,防止其他用户访问。

5、  编辑虚拟主机的配置文件

可以更改/etc/apache2/sites-available/default文件至如下:

<VirtualHost *:80>  
   #指定了管理者的邮箱,可以不写   
ServerAdmin admin@svn.com  
#每一个Location指定了url为该种情况下的该指向哪个文件,如当url   
#为htip://10.23.0.240/project时,对应的SVN路径为下边SVNPath指   
#定的路径/var/www/svn/repos,具体可以参见svn配置文档   
#http://svndoc.iusesvn.com/svnbook/1.4/   
   <Location /project>    
     DAV svn  
     SVNPath /var/www/svn/repos  
     AuthType Basic  
     AuthName "SubversionRepository"  
     AuthBasicAuthoritative off   
     #指定apache通过mysql进行验证开启   
     Auth_MySQL on  
     Auth_MySQL_Authoritative on  
     #指定mysql服务器的地址为localhost   
     Auth_MySQL_Host localhost  
     #指定进行验证的数据库为svn;   
     Auth_MySQL_DB svn  
     #指定mysql svn数据库的用户名   
     Auth_MySQL_User root  
     #指定mysql svn数据库的密码,本仓库中为root   
     Auth_MySQL_Password root  
     #指定mysql进行验证的数据库表   
     Auth_MySQL_Password_Tableuser  
     Auth_MySQL_Empty_Passwordsoff  
     Auth_MySQL_Encrypted_Passwordson  
     #指定进行验证的用户名的表中用户名的字段,本仓库为name   
     Auth_MySQL_Username_Fieldname  
     #指定进行验证的用户名的表中密码的字段,本仓库为passwd   
     Auth_MySQL_Password_Fieldpasswd  
     #指定进行验证的用户名的表中密码的加密方式,本仓库为PHP_MD5   
     Auth_MySQL_Encryption_TypesPHP_MD5  
     #指定需要进行组验证,对于本版本库需要该用户的组为admin   
     require group admin  
   </Location>  
   #同理,该location指定了访问的url为htip://10.23.0.240/project1   
   #时,对应的路径为/var/www/svn/repos1。   
   <Location /project1>    
     DAV svn  
     SVNPath /var/www/svn/repos1  
     AuthType Basic  
     AuthName "SubversionRepository"  
     AuthBasicAuthoritative off   
     #指定apache通过mysql进行验证开启   
     Auth_MySQL on  
     Auth_MySQL_Authoritative on  
     #指定mysql服务器的地址为localhost   
     Auth_MySQL_Host localhost  
     #指定进行验证的数据库为svn;   
     Auth_MySQL_DB svn  
     #指定mysql svn数据库的用户名   
     Auth_MySQL_User root  
     #指定mysql svn数据库的密码,本仓库中为root   
     Auth_MySQL_Password root  
     #指定mysql进行验证的数据库表   
     Auth_MySQL_Password_Tableuser  
     Auth_MySQL_Empty_Passwordsoff  
     Auth_MySQL_Encrypted_Passwordson  
     #指定进行验证的用户名的表中用户名的字段,本仓库为name   
     Auth_MySQL_Username_Fieldname  
     #指定进行验证的用户名的表中密码的字段,本仓库为passwd   
     Auth_MySQL_Password_Fieldpasswd  
     #指定进行验证的用户名的表中密码的加密方式,本仓库为PHP_MD5   
     Auth_MySQL_Encryption_TypesPHP_MD5  
     #指定需要进行组验证,对于本版本库需要该用户的组为test   
     require group test  
   </Location>  
</VirtualHost>  
需要注意,本文假设用户admin上传了project,而用户test上传了project1,因此配置两个不同的location以进行访问,且每一个版本库对应一个项目。为了同一个组的用户能访问到该组的所有代码,因此配置了require  group选项。

6、  启用SVN配置

重新加载配置,以使得配置生效

$sudo /etc/init.d/apache2 reload  
在浏览器中输入http://127.0.0.1/project,输入用户名admin,密码admin,可以访问该版本库repos1的最新版本。使用svn客户端,如TortoiseSVN时,版本库的地址为http://10.23.0.240/project1/(本svn服务器端部署在10.23.0.240机器上)。然后输入用户名admin,密码admin即可checkout。

在浏览器中输入http://127.0.0.1/project1,输入用户名test,密码test,可以访问该版本库repos2的最新版本。

7、war文件进行自动部署至tomcat服务器下

可以通过修改每个项目的版本库中hooks文件夹下的post-commit钩子,来方便的进行自动部署。该钩子其实就是一个shell脚本,用于当上传完毕之后执行的。注意,此shell脚本为了保证安全,不能使用环境变量。

本脚本以repos为例,repos1同理更改相应位置即可

$cd /var/www/svn/repos  
#复制原来的示例文件,并且改名为post-commit   
$cp post-commit.tmpl  post-commit  
$vim post-commit  
然后修改post-commit文件的内容如下:

#将调试信息输出至/tmp/svn-up.out文件中,这对于调试很重要   
exec >/tmp/svn-up.out 2>&1  
#可以看到svn调用该shell脚本时所传递进来的所有的参数   
echo "$@"  
#设置传给SVN服务器中可以含有中文   
export LANG="zh_CN.UTF-8"  
#使用svn export命令将文件仓库导出至文件夹下,也可以使用svn update命令,该命令   
#貌似是只导出更新的一部分,这我没有尝试。   
svn export --username admin --password admin http://10.23.0.240/project/home/administrator/ProgramFiles/apache-tomcat-6.0.28/webapps --force  
cd  /home/administrator/ProgramFiles/apache-tomcat-6.0.28/webapps  
#对每个war文件建立相应的文件夹并解压   
for file in *.war  
  do  
#获取相应的war文件的文件夹名,如如果上传的testSVN.war文件,则dirname为   
#testSVN;   
        dirname=${file%%.*}  
        echo $dirname  
        echo $file  
        rm -rf $dirname  
        mkdir $dirname  
        cp $file $dirname  
        cd $dirname  
#在该文件夹中将war文件解压出来;   
       /home/administrator/ProgramFiles/jdk1.6.0_31/bin/jar -xf $file  
        rm -rf $file  
        cd ..  
  done  
至此,该war文件一旦通过svn客户端,上传至svn服务器时,就会相应的部署到tomcat服务器下。

本文转载自:

共有 人打赏支持
jk409
粉丝 20
博文 157
码字总数 38443
作品 0
深圳
后端工程师
ansible+nginx+apache+svn自动化发布

一.ansible根据以下网址进行安装 http://blog.51cto.com/8999a/1965139 二.nginx+apache+svn安装 rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.n......

轻狂书生999 ⋅ 05/02 ⋅ 0

Maven自动部署(SCM-SVN/Git)(maven-scm-plugin/maven-release-plugin插件的使用)

以下内容引用自https://ayayui.gitbooks.io/tutorialspoint-maven/content/book/mavendeployment_automation.html: 注意:Maven自动构建和自动部署的区别在于,构建只是编译代码阶段,而部署...

easonjim ⋅ 2017/05/15 ⋅ 0

关于对-话说Svn与Git的区别-中,对svn的申诉

今天看到一篇文章:“话说Svn与Git的区别”https://www.jianshu.com/p/bfec042349ca,通篇都是讲git如何好,svn就没有什么用的样子,对于经常使用svn的我,我想做一点svn的申诉: 1.svn也可以...

zdhsoft ⋅ 03/07 ⋅ 0

实战:使用SVN+apache搭建一个版本控制服务器

SVN简介 SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。说...

寰宇01 ⋅ 06/14 ⋅ 0

super_empire/patch-generator-parent

patch-generator-parent 通用svn、git增量部署补丁生成器,可用于svn/git/getee管理的maven项目的增量部署文件生成,支持多模块父子项目. 该模块可以对git/svn管理的项目进行增量代码生成用于...

super_empire ⋅ 04/20 ⋅ 0

通用 svn、git 增量部署补丁生成器 - patch-generator-parent

通用 svn、git 增量部署补丁生成器,可用于 svn/git/getee 管理的 maven 项目的增量部署文件生成,支持多模块父子项目。 总共包含四种生成方案: git 服务器分支提交分析; git 提交日志分析...

em_Aaron ⋅ 04/13 ⋅ 0

初学者 熟悉基本centos6.5命令 以及 如何搭建SVN+http访问

1、安裝SVN 2、svnserve --version 表示安裝成功 3、创建SVN版本库也就是SVN文件存放地址跟目录 4、创建版本库 5、当执行这个命令的时候 会出现提示 y/n 是否下载。你写上y就可以了。 然后当...

一个橙子HHH ⋅ 05/15 ⋅ 0

SVN跨服务器配置post-commit提交后自动更新(SVN与WEB服务器不在同一台机器)

背景情况:SVN与WEB不在同一台服务器上,需要SVN提交后WEB站点自动进行SVN UPDATE更新,查阅网上的教程,发现部分的细节和权限部分没有提到导致跨服务器ssh执行更新脚本失败,手动执行post-...

PartyAnimals ⋅ 06/21 ⋅ 0

MyEclipse使用总结——MyEclipse10安装SVN插件

一、下载SVN插件subclipse 下载地址:http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240 在打开的网站中找到subclipse的最新版本,如下图所示: 下载完成之后,得到的...

thinkyoung ⋅ 2014/12/14 ⋅ 0

【git学习】SVN项目迁移到Git操作指南

2017年6月份的时候,我就着手在公司推广git,首先我自己尝试搭建了GitLab来管理代码,并且通过以下博客记录了GitLab的搭建,以及GitLab备份,GitLab升级等事情。 git学习——>在CenterOS系统...

qq446282412 ⋅ 05/19 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

如何使用serverchan微信推送告警

之前实现推送告警信息到微信的方法有如下几种: 1、通过企业公众号实现----收费: 2、通过QQ邮箱,在微信平台上开启收到邮件进行提醒; 3、第三方告警平台API,一般也是收费的; 不过最近看文...

问题终结者 ⋅ 31分钟前 ⋅ 0

TCP的RPC

RPC就是远程方法调用(Remote Process Call ),包含了客户端和服务端,涉及了对象的序列化传输。 1.服务端启动,注册远程调用的类2.客户端发送请求信息包含类、方法、参数的一些信息、序列化传...

Cobbage ⋅ 51分钟前 ⋅ 0

IOS-UI UI初步代码布局添加事件

ISO开发界面,UI是必须学习的一部分,其实很早之前想学来了,一直没有沉下心来学习。看到IOS的代码风格和布局就别扭的不行,跟java代码和android布局比较显得不是那么方便,所以一直到现在。...

京一 ⋅ 今天 ⋅ 0

浅谈OpenDaylight的二次开发

OpenDaylight作为一款开源SDN网络控制器,依托于强大的社区支持以及功能特性,成为了目前主流的SDN网络控制器开发平台。在比较稳定的OpenDaylight Helium版本中,已经为开发者提供了大量的网...

wangxuwei ⋅ 今天 ⋅ 0

API 开发中可选择传递 token 接口遇到的一个坑

在做 API 开发时,不可避免会涉及到登录验证,我使用的是jwt-auth 在登录中会经常遇到一个token过期的问题,在config/jwt.php默认设置中,这个过期时间是一个小时,不过为了安全也可以设置更...

等月人 ⋅ 今天 ⋅ 0

Java NIO之文件处理

程序要操作本地操作系统的一个文件,可以分为以下三个部分: 对文件位置的操作 对文件的操作 对文件内容的操作 其中,对文件内容的操作在 Java NIO之Channel 中已经有了介绍,通过FileChann...

士别三日 ⋅ 今天 ⋅ 0

Maven的pom.xml配置文件详解

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.......

小海bug ⋅ 今天 ⋅ 0

解决httpclient超时设置不生效的问题

最近公司有项目需要通过http调用第三方服务,且第三方服务偶有超时,故需要设置一定的超时时间防止不响应的情况出现。 初始设置如下: [java] view plain copy //超时设置 RequestConfig re...

Mr_Tea伯奕 ⋅ 今天 ⋅ 0

过滤器Filter和拦截器HandlerInterceptor

过滤器 依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要...

hutaishi ⋅ 今天 ⋅ 0

Redis入门详解(转)

Redis入门详解 Redis简介 Redis安装 Redis配置 Redis数据类型 Redis功能 持久化 主从复制 事务支持 发布订阅 管道 虚拟内存 Redis性能 Redis部署 Redis应用场景 Redis总结 Redis简介: Redi...

xiaoyaoyoufang ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部