linux下构建svn服务器并实现项目自动部署

在Linux系统中搭建svn服务所需要用到的软件叫做subversion,可以通过yum来进行安装.
svn服务是为了实现协同工作,即一个团队公众开发一个项目而不导致代码混乱,不会出现今天我修改的代码在不通知同事的情况下又被他修改了.
自动部署是为了让修改后的代码自动的部署到项目文件夹里,这个要通过svn的钩子功能实现.
因此对svn的搭建要进行两步操作:一、安裝svn服务器,二、配置svn钩子文件
1. svn服务器创建(安装):
1.1 安装:

[root@singledb ~]# yum install -y subversion

Loaded plugins: rhnplugin, security

This system is not registered with RHN.

RHN support will be disabled.

Setting up Install Process

Resolving Dependencies

--> Running transaction check

---> Package subversion.i386 0:1.4.2-4.el5_3.1 set to be updated

--> Finished Dependency Resolution



Dependencies Resolved



====================================================================================================

 Package                Arch             Version                        Repository             Size

====================================================================================================

Installing:

 subversion             i386             1.4.2-4.el5_3.1                rhel-base             2.3 M



Transaction Summary

====================================================================================================

Install      1 Package(s)        

Update       0 Package(s)        

Remove       0 Package(s)        

Total download size: 2.3 M

Downloading Packages:

subversion-1.4.2-4.el5_3.1.i386.rpm                                          | 2.3 MB     00:00    

Running rpm_check_debug

Running Transaction Test

Finished Transaction Test

Transaction Test Succeeded

Running Transaction

Installing     : subversion                                                                   

1/1

Installed:

subversion.i386 0:1.4.2-4.el5_3.1                                                                

Complete!

1.2 验证安装版本:

[root@singledb ~]# svnserve --version

svnserve, version 1.4.2 (r22196)

compiled Aug  5 2009, 19:03:56

Copyright (C) 2000-2006 CollabNet.

Subversion is open source software, see http://subversion.tigris.org/

This product includes software developed by CollabNet (http://www.Collab.Net/).

The following repository back-end (FS) modules are available:

* fs_base : Module for working with a Berkeley DB repository.

* fs_fs : Module for working with a plain file (FSFS) repository.

1.3 创建SVN 版本库

[root@singledb ~]# mkdir /u02/svn --新建文件夹

[root@singledb ~]# svnadmin create /u02/svn/davesvn  --davesvn为版本库名称

1.4 SVN 配置
创建版本库后,在这个目录下会生成3个配置文件:

[root@singledb conf]# pwd

/u02/svn/davesvn/conf

[root@singledb conf]# ls

authz  passwd  svnserve.conf

(1)svnserve.conf: svn服务配置文件下。

(2)passwd: 用户名口令文件。

(3)authz: 权限配置文件。

三个文件的配置内容

svnserve.conf(主要是打开以下配置,注意每行前面不能有空格):

anon-access = read
auth-access = write
password-db = passwd
authz-db = authz
realm = /data/svnhome

passwd文件:

[users]
zhang =zhang123 --账号 =密码

authz文件:

[aliases]
[groups]
[/]
zhang=rw

1.5 启动SVN服务:

[root@singledb conf]# svnserve -d -r /u02/svn

   -d表示后台运行

   -r 指定根目录是 /u02/svn

1.6停止SVN服务:

[root@singledb conf]# ps -ef | grep svn
root      4592     1  0 18:04 ?        00:00:00 svnserve -d -r /u02/svn
root      4594  3709  0 18:04 pts/1    00:00:00 grep svn
ps -aux |grep svn
kill -9 进程杀掉

2.自动部署项目
使用post-commit实现自动部署

搭建svn都不是仅仅为了把代码存到仓库,而是同步部署到对应的项目。

在 svn 目录的 /hooks里面有一堆tmpl,这些tmpl可以做很多事情,不过今天我们就说一下自动部署post-commit.tmpl。

tmpl文件是模版文件,我们要用post-commit需要手动复制对应tmpl里面的内容到新的post-commit里面

cp post-commit.tmpl post-commit

step.1:

然后打开文件清空内容,修改为以下代码:

!/bin/sh
export LANG=zh_CN.UTF-8
/usr/bin/svn update --username **** --password **** /var/www/test

其中第一行意思是:用sh来解析这个脚本,因为各种shell的语法有细微的差别

第二行是编码格式:这里我使用的是UTF-8

最后一行/usr/bin/svn 是svn的路径,不是项目路径,应该都是一样的,后半句分别是用户名、密码、和项目路径。–username这个比较坑了,网上搜出来的很多都搞错了,前面其实是两个减号,英文输入法下的。

step.2:

修改post-commit的可执行权限

chmod 755 post-commit

step.3:

在服务器进入项目目录/var/www/test checkout 整个项目。

注意此处不要checkout文件夹,正确代码应该是这样:

svn checkout svn://{您的服务器地址}:{端口号}/test . //注意目录后面还有一个点
注意:此处的/test 可不需要添加:( 添加的目的是为了实现多个项目。 )

svn checkout svn://{您的服务器地址}:3690 . //注意目录后面还有一个点
至此,如果按照此步骤搞下来,应该已经没有问题了,你可以本地commit代码,自动同步到项目了。

3.常见错误:

255错误:post-commit没有给执行权限 或者 头部没有执行用sh执行,就是没有#!/bin/sh
提示跳过目录:服务器目录没有checkout代码,记得一定要先checkout一次,才能同步(!,每次新建项目都需要)
什么提示也没有:这种情况出现在用工具commit的时候,成功了,但是就是没有同步,建议你到linux下,使用./post-commit手动执行看报什么错误。如果乱码,请将文件内编码格式修改为GBK
提示** is a direcitory:/usr/bin/svn你把这个搞错了,他不是一个目录,是svn的路径

你可能感兴趣的:(服务器)