svn 自动部署到web服务器设置问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了svn 自动部署到web服务器设置问题相关的知识,希望对你有一定的参考价值。

我的需求是这样的,我客户端装在windows上,服务端在linux上,我现在想在客户端更改html文件后,可以自动部署到linux下的 /opt/web tomcat目录下,我怎么配置呢?网上有一段代码更改post-commit

#!/bin/sh
REPOS="$1"
REV="$2"
WEB=/opt/web

export LANG=zh_CN.UTF-8

svn update $WEB --username admin --password 123456 --no-auth-cache

但说得不清楚,好像是客户端和服务端在同一台机器吧,而且我想用指定目录下的文件到tomcat目录下,并不是所有的目录都要部署到tomcat下,有高手在吗?越详细越好,回答好,加400分。

修改服务器上的钩子程序post-commit,将指定要发布的内容的文件夹导出(export)到tomcat目录下就行了

钩子程序post-commit是在执行commit操作后自动执行的,这样每次commit后都自动执行一次导出操作,保持tomcat文件夹内容就是所要发布的内容

---------------------------------------------------------------------------
补充:
例如你版本库的svn访问地址是http://10.30.11.12:8080/svn/project1,你想把这个版本库下的/trunk/web文件夹发布到tomcat上,发布到tomcat的文件夹地址是d:/tomcat/opt/web,svn的管理员用户名是abc,密码是12345,那么这个钩子程序应该就是:
svn export http://10.30.11.12:8080/svn/project1/trunk/web d:/tomcat/opt/web --force --username abc --password 12345 --no-auth-cache

(本人对linux不熟悉,这行指令如有与linux语法不一致的地方,请参考原理自行修改)
说明:
1、--force 是说强制覆盖d:/tomcat/opt/web这个文件夹,避免这个文件夹不为空时报错
2、--username abc --password 12345 是自动将用户名和密码作为参数传送进去
3、--no-auth-cache 是说不缓存用户名和密码,这是出于安全考虑
4、svn export 是将所指定的url的内容导出到所指定的文件夹去。这里之所以不用update而用export,是因为update会导致生成一个隐藏.svn文件夹,这个文件夹是我们不需要的

当然了,如果整个发布的内容很多的话,建议还是用update,而不用export,因为update只更新有变化的部分,而export将重新导出所有内容,网络消耗比update大。
参考技术A 你把文件放在对应的文件下更新就OK了,另外你要把你的Tomcat的配置文件更改下,Tomcat\conf
下的web.xml文件里的<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>development</param-name>
<param-value>false</param-value>
</init-param>

这段代码里的<param-name>development</param-name>
<param-value>false</param-value>把false改成true就OK了。

Linux下搭建SVN服务器及自动更新项目文件到web发布目录(wwwroot)的方法

1、在SVN服务器端准备工作

说明:

服务器操作系统:centos7.3

SVN安装路径:/usr/bin/svn

SVN项目版本库路径:/home/svn/repo        --repo为版本库名称

SVN登录账号:admin

SVN登录密码:123456

Web站点根目录:/home/wwwroot/

实现目的:

当svn项目中有任何修改更新时,系统会自动实时从svn中检出文件并同步到Web站点根目录

2、安装SVN服务器

我在这里直接采用yum安装方式(当然也可以自己去官方下载安装)。

[[email protected] ~]# yum install subversion -y 

[[email protected] ~]# rpm -qa | grep sub      #查看安装文件

subversion-libs-1.7.14-10.el7.x86_64

subversion-1.7.14-10.el7.x86_64

[[email protected] ~]# svnserve --version      #检验已经安装的SVN版本信息

svnserve,版本 1.7.14 (r1542130)

   编译于 Nov 20 2015,19:25:09


版权所有 (C) 2013 Apache 软件基金会。

此软件包含了许多人的贡献,请查看文件 NOTICE 以获得更多信息。

Subversion 是开放源代码软件,请参阅 http://subversion.apache.org/ 站点。


下列版本库后端(FS) 模块可用: 


* fs_base : 模块只能操作BDB版本库。

* fs_fs : 模块与文本文件(FSFS)版本库一起工作。


Cyrus SASL 认证可用。

3、创建SVN 版本库

[[email protected]server ~]# mkdir /home/svn/repo

[[email protected]server ~]# svnadmin create /home/svn/repo          --repo为版本库名称

4、配置svnserve

上述版本库/home/svn/repo建立后,在文件夹下会生成conf文件夹,进入/home/svn/repo/conf下面会有下面3个文件authz  、passwd 、 svnserve.conf。

[[email protected]server ~]# cd /home/svn/repo/

[[email protected] repo]# pwd

/home/svn/repo

[[email protected] repo]# ls

conf  db  format  hooks  locks  README.txt

[[email protected] repo]# cd conf/

[[email protected] conf]# ls

authz  passwd  svnserve.conf

4.1、svnserve.conf 文件, 该文件配置项分为以下5项:

       anon-access: 控制非鉴权用户访问版本库的权限。

       auth-access:  控制鉴权用户访问版本库的权限。

       password-db: 指定用户名口令文件名。

       authz-db:指定权限配置文件名,通过该文件可以实现以路径为基础的访问控制。

       realm:指定版本库的认证域,即在登录时提示的认证域名称。若两个版本库的认证域相同,建议使用相同的用户名口令数据文件,配置如下:

  • anon-access = none

  • auth-access = write

  • password-db = passwd

  • authz-db = authz

  • realm/home/svn/repo

4.2、passwd修改为:

  • [users]  

  • admin = 123456    //这里的username和password自己设置  

4.3、authz最后加上以下两行(这两行解决了 SVN客户端解决authorization failed问题)

  • [/]

  • * = rw

#################样例#################

[[email protected] conf]# cat authz

[groups]                                     #定义组

admin = admin                            #创建一个admin组,将用户加入到组

dev=tian,lier,erllo      

[/]                                             #根目录权限设置(就是“svn”这个文件夹)

aaa = rw                                    #aaa对svn下的所有版本库有读写权限            

[repo:/]                                     #repo:/,表示对repo版本库下的所有资源设置权限

@admin = rw                              #admin组的用户对repo版本库有读写权限

@dev = rw

#####################################

5、启动svnserve

[[email protected] conf]# svnserve -d -r /home/svn/repo/ 

                                                                  -d表示后台运行

                                                                  -r 指定根目录是/home/svn/repo/

[[email protected]server conf]# ps -ef | grep svn

root     28950     1  0 19:12 ?        00:00:00 svnserve -d -r /opt/svn/repo/

root     28952 28246  0 19:12 pts/0    00:00:00 grep --color=auto svn

6、停止svnserve

[[email protected]server conf]# ps -aux |grep svn

[[email protected]server conf]# kill -9  进程号         #进程杀掉

7、客户端使用

客户端用svn或者windows下的TortoiseSVN客户端。

1)从服务端checkout版本库(在当前目录下)

svn checkout svn://服务器的ip地址/

例:检出svn库中的内容

[[email protected]server ~]# cd /home/

[[email protected]server home]# svn checkout svn://127.0.0.1/repo

在/home目录下便生成了一个 repo 目录。里面的内容是 版本库中的内容。

执行 ll -a 可以看见 .svn 这边是svn的记录

新增几个文件 touch test.txt

svn add * (一定要在 repo目录下哦,因为要有 .svn呀)           #为版本库中添加内容

svn commit -m ‘add file‘                                                #为版本库中提交内容,一定要对当前版本写注释

删除版本库中的文件

svn delete svn://127.0.0.1/pro/er.txt -m ‘del‘


注:可以使用带用户名和密码的访问:

svn co --username hello --password 123svn://192.168.233.203/repo


*************************************************************************

SVN版本库更新

svn up /svn/repo

上传文件到服务器

[[email protected]server repo]# touch /svn/repo/test.php        #所有的动作必须在repo版本库中完成

[[email protected]server repo]# svn add /svn/repo/test.php           #上传test.php文件到svn服务器

删除服务器上的文件

[[email protected]server repo]# svn rm /svn/repo/test.php--force

查看版本库内容

[[email protected] repo]# svn list /svn/repo/

--------------------------------------------------------------------------------------------------------

创建版本库:

终端输入:svnadmin create [路径]
该路径可以是相对路径,例如,当前在home/user/svn/目录下,输入svnadmin create myproject,则该版本库会被创建在home/user/svn/目录下,新建一个文件夹名为myproject,其中便是版本库的文件了。

将文件导入版本库:
终端输入:svn import [源路径] [目标版本库路径] -m [日志信息]
源路径可以是相对路径,导入时会递归导入源路径下的所有文件和文件夹,目标版本库路径需要绝对目录(反正我试验是这样的),例如版本库的目录是:home/user/svn/myproject/。则应该这样写:file:///home/user/svn/myproject/
例如将当前目录导入版本库myproject:
svn import . file:///home/user/svn/myproject -m"导入文件"

从版本库导出:
导入后原文件并未被纳入版本管理,若想获得受版本控制的文件,就需要从版本库导出
终端输入:svn co [版本库路径] 
例如将myproject库中的文件导出到当前目录:svn co file:///home/user/svn/myproject .

*************************************************************************

8、然后配置SVN钩子自动更新项目文件到web目录

钩子 hooks (可以将svn版本库中的内容同步更新到指定目录)

[[email protected] ~]# cd /home/svn/repo/hooks下

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

 

#!/bin/sh
export LC_CTYPE="zh_CN.UTF-8"
SVN=/usr/bin/svn
TODIR=/home/www #要强制更新的目录
$SVN update –username svnuser –password svnpasswd $TODIR #执行更新


[[email protected] hooks]#  chmod a+x post-commit

[[email protected] hooks]#  cd  /home

[[email protected] home]# ls

www     repo

[[email protected] home]# mv  /home/repo  /home/wwwroot                       

                                              #将linux客户端的检出的版本库命名为web的发布目录wwwroot



*************************************************************************

文档引自:http://www.cnblogs.com/xuyk/p/6024757.html


一、使用SVN中post-commit实现自动实时从svn中检出文件并同步到Web站点根目录

cd /home/svn/hooks

cp post-commit.tmpl post-commit

vim post-commit #编辑,添加以下代码

REPOS="$1"
REV="$2"
export LANG=en_US.UTF-8
SVN_PATH=/usr/bin
WEB_PATH=/home/wwwroot/
SVN_USER=admin
SVN_PASS=admin
LOG_PATH=/tmp/svn.log
echo `date "+%Y-%m-%d %H:%M:%S"` >> $LOG_PATH
echo `whoami`,$REPOS,$REV >> $LOG_PATH
$SVN_PATH/svn update $WEB_PATH --username $SVN_USER --password $SVN_PASS --no-auth-cache >> $LOG_PATH    

:wq #保存退出

chown www:www /home/svn/hooks/post-commit #设置脚本所属用户组,www为web服务运行账户和组

chmod +x /home/svn/hooks/post-commit #添加脚本执行权限

说明:

whoami #执行此程序的用户

REPOS="$1" #svn项目绝对路径值

REV="$2" #最新版本号

--no-auth-cache #不保存账户认证信息

二、客户端测试

使用svn客户端添加一个文件之后,进行svn添加并提交操作进入服务器/home/wwwroot目录下可以看到提交到svn的文件已自动更新到web目录下

至此,Linux下SVN服务器自动更新文件到Web目录教程完成。

*************************************************************************


本文出自 “MQ_douer” 博客,请务必保留此出处http://douer.blog.51cto.com/6107588/1915001

以上是关于svn 自动部署到web服务器设置问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在windows上安装部署设置SVN服务器

如何在windows上安装部署设置SVN服务器

如何在windows上安装部署设置SVN服务器

如何用Jenkins实现自动化部署svn更新代码

jenkins设置svn路径时的疑惑,求解答

如何用Jenkins实现自动化部署svn更新代码