在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: 权限配置文件。
anon-access = read
auth-access = write
password-db = passwd
authz-db = authz
realm = /data/svnhome
[users]
zhang =zhang123 --账号 =密码
[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
然后打开文件清空内容,修改为以下代码:
!/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这个比较坑了,网上搜出来的很多都搞错了,前面其实是两个减号,英文输入法下的。
修改post-commit的可执行权限
chmod 755 post-commit
在服务器进入项目目录/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的路径