文档章节

SVN部署http

jk409
 jk409
发布于 2015/11/25 19:26
字数 1841
阅读 194
收藏 4

本文详细讲述了在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
博文 159
码字总数 38443
作品 0
深圳
后端工程师
Puppet系列之三:Puppet结合SVN实现版本的集中化备份与恢复

1 概述 通过安装部署Puppet C/S模型,实现Puppet Server端管理所有被控制机的整个生命周期:从初始化到软件升级、从配置文件创建到测试部署、从系统维护到服务器迁移等。Puppet能够持续化的与...

guzhoujiexing
06/26
0
0
Linux系统搭建Apache+SVN(CentOS6.5)

SVN安装部署在前几篇博客中有 1.安装软件 # yum install httpd # yum install moddavsvn # yum install subversion 2.测试是否成功 # httpd -version # svnserve --version 3.配置 修改所有者......

Babyface丶小白
2015/08/27
0
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
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
06/26
0
0
linux 下搭建部署独立SVN服务器全程详解

本文SVN服务器运行方式:独立服务器 (例如:svn://xxx.com/xxx) svn存储版本数据也有2种方式: BDB(一种事务安全型表类型)和FSFS(一种不需要数据库的存储系统)。 因为BDB方式在服务器中断时,...

fzxu_05
2014/04/23
0
4

没有更多内容

加载失败,请刷新页面

加载更多

下一页

spring-boot | 日志

引言 好久不见,都还好吗? 大家都知道,我一般都是带来实用的东西,这次也一样,我们来试试项目开发中的日志处理。 理论知识 1、为什么要用日志?你是否因为项目出现问题,查找日志文件定位...

成都_小冯同学
7分钟前
0
0
dubbo下的补偿实现(一)

背景 由于前面几篇文章涉及的问题 分布式事务的思考 在我们微服务的场景下 各种本地事务都没有办法控制的很好。 A服务调用B服务 当B服务成功提交之后 A发生了异常 这种情况下要如何处理呢??...

Mr_Qi
15分钟前
2
0
HTML显示json字符串并且进行格式化

通过pre标签进行格式化展示,使用JSON.stringify()方法转换。 代码如下:   <html> <head> <title>HTML显示json字符串并且进行格式化</title> </head> <body> <p id="show_p">{ "name": "B......

writeademo
36分钟前
0
0
LNMP——php-fpm

php-fpm的pool •vim /usr/local/php/etc/php-fpm.conf //在[global]部分增加include并删除我们之前www池子 • include = etc/php-fpm.d/*.conf • mkdir /usr/local/php/etc/php-fpm.d/ • ......

chencheng-linux
40分钟前
0
0
TensorFlow layers slim 模块搭建cnn对mnist分类,比较bn效果

shape变化 (?, 784)(?, 28, 28, 1)(?, 14, 14, 8)(?, 7, 7, 8)(?, 1, 1, 8)(?, 8)(?, 10) 结果对比,基本上还是有点用的 0.91725457 0.9232 0.9548 0.95530.9177273 0.9234 0....

阿豪boy
42分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部