一.需求.

  本地文件上传到测试环境svn,测试环境同步到生产环境rsync.开发环境与测试环境与生产环境分离.

二.搭建SVN服务器.

  yum -y install subversion && which svn

1 [root@localhost ~]# which svn
2 /usr/bin/svn
 1 [root@localhost ~]# svn help
 2 usage: svn <subcommand> [options] [args]
 3 Subversion command-line client, version 1.6.11.
 4 Type 'svn help <subcommand>' for help on a specific subcommand.
 5 Type 'svn --version' to see the program version and RA modules
 6   or 'svn --version --quiet' to see just the version number.
 7 
 8 Most subcommands take file and/or directory arguments, recursing
 9 on the directories.  If no arguments are supplied to such a
10 command, it recurses on the current directory (inclusive) by default.
11 
12 Available subcommands:
13    add ##添加文件到记录,下次提交时会使用
14    blame (praise, annotate, ann) ##追溯文件的修改信息
15    cat ##取得特定版本的某文件显示
16    changelist (cl)  ##提交的命名组
17 checkout (co) ##svn减除命令 18 cleanup  ##本地文件加锁无法更新时使用 19 commit (ci)  ##提交 20 copy (cp)  ##赋值文件 21 delete (del, remove, rm) 22 diff (di)  ##显示特定修改的详细信息 23 export  ##导出工作目录的树形结构 24 help (?, h) 25 import ##导入文件到版本库 26 info   ##显示一个目录或文件的详细信息 27 list (ls)  ## 显示某一个版本存在的文件 28 lock  ##锁定文件 29 log   ##展示svn的版本作者,日期,路径 30 merge  ##合并文件 31 mergeinfo 32 mkdir 33 move (mv, rename, ren) 34 propdel (pdel, pd) 35 propedit (pedit, pe) 36 propget (pget, pg) 37 proplist (plist, pl) 38 propset (pset, ps) 39 resolve 40 resolved 41 revert  ##本地撤销,没有commit之前 42 status (stat, st)  ##状态信息查看 43 switch (sw) ##把工作拷贝更新到其他目录 44 unlock ## 解锁文件 45 update (up) ##更新本地库 46 47 Subversion is a tool for version control. 48 For additional information, see http://subversion.tigris.org/

创建版本库

svnadmin create /data/svn/svnrepo  这个命令创建一个新的版本库,如果路径不存在会自动创建出路径

查看这个版本库下的文件结构

1 [root@localhost /]# ll /data/svn/svnrepos/
2 total 24
3 drwxr-xr-x 2 root root 4096 Dec 11 08:12 conf   //配置文件
4 drwxr-sr-x 6 root root 4096 Dec 11 08:11 db
5 -r--r--r-- 1 root root    2 Dec 11 08:11 format
6 drwxr-xr-x 2 root root 4096 Dec 11 08:11 hooks
7 drwxr-xr-x 2 root root 4096 Dec 11 08:11 locks
8 -rw-r--r-- 1 root root  229 Dec 11 08:11 README.txt

我们主要使用的是db库, 新增用户等的控制在conf

[root@localhost /]# ll /data/svn/svnrepos/conf 
total 12
-rw-r--r-- 1 root root 1080 Dec 11 08:11 authz  //在这里创建用户
-rw-r--r-- 1 root root  309 Dec 11 08:11 passwd  //修改密码  
-rw-r--r-- 1 root root 2279 Dec 11 08:11 svnserve.conf

增加用户,配置权限,密码

1 vi authz
2 [/]
3 lyx=rw
4 vi passwd
5 lyx=lyx
6 vi service.conf
7 去掉passwd-db 的注释
8 去掉authz-db 的注释
9 配置realm = /data/svn/svnrepos

启动服务器 svnserve -d (as deamon) -r (as root) /data/svn/svnrepos

1 [root@localhost conf]# ps axf | grep svn
2  1669 pts/0    S+     0:00      |   \_ grep svn
3  1643 ?        Ss     0:00 svnserve -d -r /data/svn/svnrepos

windows 上验证过下  

无法访问,显然端口号没有开,svnserve 的端口号是3690 在本地做一个转发.用本地13690 转发到129 的3690 tcp

配置完之还是不行,不过提示变成了一段乱码,显然是有作用的. 在另一台虚拟机中svn checkout svn://192.168.137.129报错主机不可达,显然是防火墙的问题,于是service iptables stop .

win上再次checkout

ok . svn 安装配置部分done !!

三 利用svn 的post-commit 钩子自动部署

cd /data/svn/svnrepos/hooks

mv post-commit.tmpl post-commit

chmod +x post-commit //赋予ex权限

vi post-commit

1 #!/bin/sh
2 REPOS="$1"
3 REV="$2"
4 export LANG=zh_CN.UTF-8
5 echo "Code Deployed at `date "+%Y-%m-%d %H:%M"`" >> /tmp/deploy.log
6 /usr/bin/svn update /data/web --username lyx --password lyx

在 /data/web 目录下,svn co svn://127.0.0.1 .(当前目录)

实验一下,本地创建文件,提交,查看/data/web 目录是否有更新.

1 [root@localhost /]# ls /data/web/
2 tst2.jnt  tst.txt

有效果,还不错了.

四  总结, hooks 目录下有多种钩子可以用了,如果你shell基础比较好,可以编个更优秀的同步脚本啊. $1 和 $2 的变量我没有用上,应该是有用的.

 

本站文章皆为原创,转载请标明出处~ 任城小三爷.

 

posted on 2015-12-23 16:00  任城三爷  阅读(491)  评论(0)    收藏  举报