部署Svn+自动发布单/多台服务

企业实战Svn

环境要求:

 

服务端:

系统 :Centos 7.4 (刚安装完的系统)

项目名称:www.ITM.com      www.CML.com

yum源下载地址:http://mirrors.163.com/.help/centos.html

安装epel源:yum -y install epel-release

IPv4: 192.168.100.125/24

客户端:

系统:windows 7

Svn工具:TotoiseSvn

IPv4:192.168.100.114/24

1、Svn搭建

[[email protected] ~]# yum -y install subversion-1.7.14-14.el7.x86_64

部署Svn+自动发布单/多台服务

[[email protected] ~]# systemctl enable svnserve.service

[[email protected] ~]# mkdir -p /webdept/svnconf

[[email protected] ~]# svnadmin create /webdept/www.ITM.com

[[email protected] ~]# svnadmin create /webdept/www.CML.com

[[email protected] ~]# ll /webdept/www.ITM.com/

部署Svn+自动发布单/多台服务

文件描述:

db目录:就是所有版本控制的数据存放文件

hooks目录:放置hook脚本文件的目录

locks目录:用来放置subversion监控锁定数据的目录,用来追踪存取文件库的客户端

format文件:是一个文本文件,里面只放了一个整数。表示当前文件库配置的版本号

conf目录:是这个仓库的配置文件(仓库的用户访问账号、权限等),也是我们要关注的配置文件

[[email protected] ~]# ls /webdept/www.ITM.com/conf/

authz          passwd         svnserve.conf 

authz                         #认证权限相关

passwd                      #用户名和密码

svnserve.conf             #服务器配置文件

 

[[email protected] ~]# cp /webdept/www.ITM.com/conf/passwd  /webdept/svnconf/passwd

[[email protected] ~]# cp /webdept/www.ITM.com/conf/authz  /webdept/svnconf/authz

注:因为svn服务器上存在多个项目,为方便管理账户信息、授权,使用统一的用户配置文件

 

[[email protected] ~]# vim /webdept/svnconf/passwd

部署Svn+自动发布单/多台服务

注:创建一个test用户 密码 123456

 

[[email protected] ~]# vim /webdept/svnconf/authz

部署Svn+自动发布单/多台服务

注:对www.ITM.com这个项目授权  r:读   w:写 

 

[[email protected] ~]# vim /webdept/www.ITM.com/conf/svnserve.conf

部署Svn+自动发布单/多台服务

注:anon-access = read             #原先注释掉了,匿名用户可以读,使用none的话就是匿名用户不可以访问

auth-access = write              #这几行都要取消注释,认证用户可以写,可以是read,write,none

password-db = passwd         #密码库文件,默认使用的是同一目录下的passwd文件作为用户密码库

authz-db = authz                #认证权限文件

realm = Welcome to the ITM project      #登陆提示信息

注意:此配置文件的所有内容必须顶格,否则会报错

 

[[email protected] ~]# vim /webdept/www.CML.com/conf/svnserve.conf

部署Svn+自动发布单/多台服务

注:这个项目的 passwd authz 文件均使用绝对路径指定

1.1 设置开机自启动:

[[email protected] ~]# vim /lib/systemd/system/svnserve.service

部署Svn+自动发布单/多台服务

[[email protected] ~]# vim /etc/sysconfig/svnserve

部署Svn+自动发布单/多台服务

注:把原/var/svn  改为自己创建的svn根目录

reboot重启测试

1.2 windows客户端连接

部署Svn+自动发布单/多台服务

部署Svn+自动发布单/多台服务

1.3 排错1:

如出现一直连接不上,是因为firewall的缘故,解决方案:

第一种

关闭防火墙:

临时关闭:systemctl stop firewalld

永久关闭:systemctl disable firewalld

第二种

防火墙放行规则:

[[email protected] ~]# firewall-cmd --permanent --add-port=3690/tcp

[[email protected] ~]# firewall-cmd --reload

部署Svn+自动发布单/多台服务

本次使用关闭防火墙

部署Svn+自动发布单/多台服务

部署Svn+自动发布单/多台服务

连接成功

1.4 排错2:

经过排错1后连接正常,但发现每次重启系统后无法连接,服务也是启动状态,报错图:

部署Svn+自动发布单/多台服务

查看服务进程:

[[email protected] ~]# ps -aux| grep svn

部署Svn+自动发布单/多台服务

解决方案:

临时解决:手动执行: kill  -9  1014(PID)  结束进程

                     启动服务:[[email protected] ~]# svnserve -d -r /webdept/

永久解决:

[[email protected] ~]# vim /etc/selinux/config

部署Svn+自动发布单/多台服务

将Enforcing 改为 Disabled 永久关闭掉Selinux

[[email protected] ~]# reboot

通过永久解决方法测试后发现能正常开机自启并连接成功

2、Svn自动更新到web根目录

环境要求

实验环境:

apache 和 SVN都属于同一台服务器

IPv4:192.168.100.125/24

svn钩子是啥?

钩子就是由版本库的事件(代码提交,属性修改等)触发程序(Shell 脚本等)。 
每一个 SVN 仓库下都有一个目录hooks,在这里面放所有的钩子程序。其中以.tmpl结尾的代表是模板,可以用来参考。

2.1 安装apache

[[email protected] hooks]# yum -y install httpd

[[email protected] ~]# vim /etc/httpd/conf.d/vhosts-httpd.conf

<VirtualHost *:80>

        ServerName www.ITM.com

        DocumentRoot /var/www/www.ITM.com

</VirtualHost>

<VirtualHost *:80>

        ServerName www.CML.com

        DocumentRoot /var/www/www.CML.com

</VirtualHost>

注:配置好虚拟目录

[[email protected] ~]# systemctl start httpd

[[email protected] ~]# systemctl enable httpd

2.2 www.ITM.com 项目

[[email protected] ~]# cd /webdept/www.ITM.com/hooks/

[[email protected] hooks]# vim post-commit

#!/bin/sh

export LANG=en_US.utf8

SVN_PATH=/usr/bin/svn

WEB_PATH=/var/www/www.ITM.com

$SVN_PATH update $WEB_PATH --username 'test' --password '123456' --no-auth-cache

#编辑post-commit 脚本

[[email protected] hooks]# chown apache:apache post-commit

[[email protected] hooks]# chmod 755 post-commit

[[email protected] hooks]# cd /var/www

[[email protected] www]# svn co svn://192.168.100.125/www.ITM.com

#输入root 用户认证密码: XXXXX

#输入svn连接用户:test

#输入svn连接密码:123456

#是否保存秘钥:yes

2.3 www.CML.com 项目

[[email protected] ~]# cd /webdept/www.CML.com/hooks/

[[email protected] hooks]# vim post-commit

#!/bin/sh

export LANG=en_US.utf8

SVN_PATH=/usr/bin/svn

WEB_PATH=/var/www/www.CML.com

$SVN_PATH update $WEB_PATH --username 'test' --password '123456' --no-auth-cache

#编辑post-commit脚本

[[email protected] hooks]# chown apache:apache post-commit

[[email protected] hooks]# chmod 755 post-commit

[[email protected] hooks]# cd /var/www

[[email protected] www]# svn co svn://192.168.100.125/www.ITM.com

#输入root 用户认证密码: XXXXX

#输入svn连接用户:test

#输入svn连接密码:123456

#是否保存秘钥:yes

 

 

2.4 验证

windows客户端先检出Svn上的项目

部署Svn+自动发布单/多台服务

上传index.html 测试页面

部署Svn+自动发布单/多台服务

内容分别为:

My www.CML.com V1

My www.ITM.com V1

上传好之后提交

部署Svn+自动发布单/多台服务

修改Windows客户端的host文件,否则会无法连接。

部署Svn+自动发布单/多台服务

第一次通过浏览器去访问

部署Svn+自动发布单/多台服务

修改index.html内容后提交更新再次去访问

My www.CML.com V2

My www.ITM.com V2

部署Svn+自动发布单/多台服务

感言:不管有多难,只要不放弃就会有收获。