• 企业级SVN版本管理与大型代码上线方案


    一,SVN服务实战应用指南

      1.1 SVN介绍

      1)Svn(subversion)是近年来崛起的非常优秀的版本管理工具,与CVS管理工具一样,SVN是一个跨平台的开源的版本控制系统。Svn版本管理工具管理着随时间改变的各种数据。这些数据放置在一个中央资料档案库(repository)中,这个档案库很像一个普通的文件服务器或者FTP服务器,但是,与其他服务器不同的是,SVN会备份并记录每个文件每一次的修改更新变动。这样我们就可以把任意一个时间点的档案恢复到想要的某一个旧的版本,当然也可以直接浏览指定文件的更新历史记录;  

      2)SVN是一个非常通用的软件系统,它常被用来管理程序源码,但是它也可以管理任何类型的文件,如文本,视频,图片等等。

      1.2 运维人员掌握版本管理

      对于版本管理系统,运维人员需要掌握的技术点:

      1)安装,部署,维护,排障

      2)简单的使用,很多公司都是由开发来管理,包括创立新仓库和添加删除账号

      3)对于版本控制系统,运维人员相当于开发商,开发人员是业主,运维搭建的系统为开发人员服务的。

    二,搭建SVN服务端

      2.1 安装配置SVN服务

    1 #检查环境
    2 [root@SVN-gaowei ~]# cat /etc/redhat-release
    3 CentOS release 6.5 (Final)
    4 [root@SVN-gaowei ~]# uname -m
    5 x86_64
    6 [root@SVN-gaowei ~]# uname -r
    7 2.6.32-431.el6.x86_64
    8 [root@SVN-gaowei ~]# 
     1 #光盘安装SVN
     2 [root@SVN-gaowei ~]# yum -y install subversion
     3 以下省略。。。
     4 Dependency Installed:
     5   apr.x86_64 0:1.3.9-5.el6_2                            apr-util.x86_64 0:1.3.9-3.el6_0.1                 
     6   libproxy.x86_64 0:0.3.0-4.el6_3                       libproxy-bin.x86_64 0:0.3.0-4.el6_3               
     7   libproxy-python.x86_64 0:0.3.0-4.el6_3                neon.x86_64 0:0.29.3-3.el6_4                      
     8   pakchois.x86_64 0:0.4-3.2.el6                         perl-URI.noarch 0:1.40-2.el6                      
     9 
    10 Complete!
    11 #安装成功
    12 [root@SVN-gaowei ~]# rpm -qa subversion
    13 subversion-1.6.11-9.el6_4.x86_64
    1 #建立svn版本库数据存储根目录(svndata)及用户,密码权限目录(svnpasswd)
    2 [root@SVN-gaowei ~]# mkdir -p /application/svndata  #数据存储根目录
    3 [root@SVN-gaowei ~]# mkdir -p /application/svnpasswd  #用户密码权限目录

      2.2 建立项目版本库

      ###创建一个新的Subversion项目yunjisuan,其实,类似yunjisuan这样的项目可以创建多个,每个项目对应不同的代码,这里只是以创建一个项目为例演示:

     1 [root@SVN-gaowei ~]# svnadmin create /application/svndata/yunjisuan
     2 [root@SVN-gaowei ~]# tree /application/svndata/yunjisuan/
     3 /application/svndata/yunjisuan/
     4 ├── conf
     5 │   ├── authz
     6 │   ├── passwd
     7 │   └── svnserve.conf
     8 ├── db
     9 │   ├── current
    10 │   ├── format
    11 │   ├── fsfs.conf
    12 │   ├── fs-type
    13 │   ├── min-unpacked-rev
    14 │   ├── rep-cache.db
    15 │   ├── revprops
    16 │   │   └── 0
    17 │   │       └── 0
    18 │   ├── revs
    19 │   │   └── 0
    20 │   │       └── 0
    21 │   ├── transactions
    22 │   ├── txn-current
    23 │   ├── txn-current-lock
    24 │   ├── txn-protorevs

    25 │   ├── uuid
    26 │   └── write-lock
    27 ├── format
    28 ├── hooks
    29 │   ├── post-commit.tmpl
    30 │   ├── post-lock.tmpl
    31 │   ├── post-revprop-change.tmpl
    32 │   ├── post-unlock.tmpl
    33 │   ├── pre-commit.tmpl
    34 │   ├── pre-lock.tmpl
    35 │   ├── pre-revprop-change.tmpl
    36 │   ├── pre-unlock.tmpl
    37 │   └── start-commit.tmpl
    38 ├── locks
    39 │   ├── db.lock
    40 │   └── db-logs.lock
    41 └── README.txt
    42 
    43 10 directories, 28 files

      2.3 编辑SVN配置文件

    1 [root@SVN-gaowei ~]# cd /application/svndata/yunjisuan/conf/
     2 [root@SVN-gaowei conf]# ll
     3 total 12
     4 -rw-r--r--. 1 root root 1080 Nov 26 07:34 authz
     5 -rw-r--r--. 1 root root  309 Nov 26 07:34 passwd
     6 -rw-r--r--. 1 root root 2279 Nov 26 07:34 svnserve.conf
     7 [root@SVN-gaowei conf]# cp svnserve.conf{,.bak}
     8 [root@SVN-gaowei conf]# vim svnserve.conf
     9 #修改配置文件的如下信息
    10 [root@SVN-gaowei conf]# cat -n /application/svndata/yunjisuan/conf/svnserve.conf.bak | sed -n '12p;13p;20p;27p'
    11     12    # anon-access = read
    12     13    # auth-access = write
    13     20    # password-db = passwd
    14     27    # authz-db = authz
    15 #将配置文件代码修改为如下所示:
    16 [root@SVN-gaowei conf]# cat -n /application/svndata/yunjisuan/conf/svnserve.conf | sed -n '12p;13p;20p;27p'    
    17     12    anon-access = none             #禁止匿名访问
    18     13    auth-access = write              #验证访问可写
    19     20    password-db = /application/svnpasswd/passwd     #密码文件位置
    20     27    authz-db = /application/svnpasswd/authz             #验证文件位置
    21     注:此配置文件里的每条配置代码必须顶格写,不能有空格。

      2.4 将authz文件和passwd文件拷贝到/application/svnpasswd下

    1 [root@SVN-gaowei conf]# cp /application/svndata/yunjisuan/conf/authz /application/svnpasswd/
    2 [root@SVN-gaowei conf]# cp /application/svndata/yunjisuan/conf/passwd /application/svnpasswd/
    3 [root@SVN-gaowei conf]# ll /application/svnpasswd/
    4 total 8
    5 -rw-r--r--. 1 root root 1080 Nov 26 07:46 authz
    6 -rw-r--r--. 1 root root  309 Nov 26 07:46 passwd

      2.5 启动svn服务

     1 [root@SVN-gaowei conf]# svnserve --help      #svn启动命令帮助
     2 usage: svnserve [-d | -i | -t | -X] [options]
     3 
     4 Valid options:
     5   -d [--daemon]            : daemon mode     #守护进程启动(后台)
     6   -i [--inetd]             : inetd mode
     7   -t [--tunnel]            : tunnel mode
     8   -X [--listen-once]       : listen-once mode (useful for debugging)
     9   -r [--root] ARG          : root of directory to serve   #指定根目录
    10   -R [--read-only]         : force read only, overriding repository config file
    11   --config-file ARG        : read configuration from file ARG
    12   --listen-port ARG        : listen port      #监听端口默认3690
    13                              [mode: daemon, listen-once]
    14   --listen-host ARG        : listen hostname or IP address   #监听IP
    15                              [mode: daemon, listen-once]
    16   -T [--threads]           : use threads instead of fork [mode: daemon]
    17   --foreground             : run in foreground (useful for debugging)
    18                              [mode: daemon]
    19   --log-file ARG           : svnserve log file
    20   --pid-file ARG           : write server process ID to file ARG
    21                              [mode: daemon, listen-once]
    22   --tunnel-user ARG        : tunnel username (default is current uid's name)
    23                              [mode: tunnel]
    24   -h [--help]              : display this help
    25   --version                : show program version information
    1 #启动svn服务
    2 [root@SVN-gaowei conf]# svnserve -d -r /application/svndata/
    3 [root@SVN-gaowei conf]# netstat -antup | grep 3690
    4 tcp        0      0 0.0.0.0:3690                0.0.0.0:*                   LISTEN      1065/svnserve       

      2.6 passwd文件及密码设置

    1 #在/application/svnpasswd/passwd文件末尾追加如下内容:
    2 [root@SVN-gaowei conf]# vim /application/svnpasswd/passwd 
    3 [root@SVN-gaowei conf]# tail -4 /application/svnpasswd/passwd
    4 yunjisuan = 123123
    5 benet = 123123
    6 stu001 = 123
    7 stu002 = 456

      2.7 authz的授权

     1 #编辑authz配置文件进行授权,在authz末尾加入以下几句代码
     2 [root@SVN-gaowei conf]# vim /application/svnpasswd/authz 
     3 [root@SVN-gaowei conf]# egrep -v "#|^$" /application/svnpasswd/authz
     4 [aliases]
     5 [groups]
     6 sagroup = stu001,stu002         #新增本行,定义组名
     7 [yunjisuan:/]                          #定义授权的范围
     8 yunjisuan = rw                        #用户单独授权
     9 benet = r                                #用户单独授权
    10 @sagroup =r                           #组用户授权

      2.8 重新启动svnserve

    1 [root@SVN-gaowei conf]# ps -ef | grep svn | grep -v grep
    2 root       1065      1  0 07:49 ?        00:00:00 svnserve -d -r /application/svndata/
    3 [root@SVN-gaowei conf]# kill 1065
    4 [root@SVN-gaowei conf]# ps -ef | grep svn | grep -v grep
    5 [root@SVN-gaowei conf]# svnserve -d -r /application/svndata/
    6 [root@SVN-gaowei conf]# ps -ef | grep svn | grep -v grep
    7 root       1099      1  0 08:01 ?        00:00:00 svnserve -d -r /application/svndata/

    三,搭建SVN客户端

      3.1 使用svn客户端(Windows版)

      3.1.1 软件版本选择

        推荐TortoiseSVN-1.9.7.27907-x64-svn-1.9.7

      3.1.2 svn客户端安装

        和windows安装其他软件流程一样

      3.1.3 svn客户端使用

      1)现在本地创建一个目录,名字任意,比如date

      

      2)鼠标右键点击date目录

      选择右键菜单里的SVN Checkout,出现下图

      

      点击ok,出现下图

      

      再次点击OK以后,结束。此时目录里多了一个隐藏的目录,表示此目录已经和svn服务器连通

      

      ###命令说明:

      1)SVN Checkout:相当于下载,第一次连接svn服务器的时候需要和服务器的对应存储目录进行数据同步,如果服务器的对应目录里有数据文件,那么就会下载到你的本地对应目录里。
    (2)SVN Update:更新数据,检查服务器端svn存储目录里是否和本地svn存储目录数据不一致,如果不一致,那么下载改变或新增的部分到本地svn目录里。(不会删除本地目录内容)
    (3)SVN Commit:提交数据到svn服务器端存储目录。本地svn存储目录会和服务器端存储目录进行比对校验。会把本地改变的部分和新增的部分同步上传至服务器端。

      3.1.4 svn客户端使用测试

      (1)向windows的svn存储目录date里放一个空文件

      

      (2)右键点击date目录,选择SVN Commit

      

      

      (3)打开本地date目录里的文件,随便写点内容后,再次进行SVN commit

      

      

      (4)直接从本地查看服务器端的数据内容

        右键点击本地svn存储目录date,选择TortoiseSVN ===>Repo-browser后出现下图:

      

      双击文件可以直接远程打开文件,可以看到里面刚刚被修改后的内容已经更新至服务器端。

      (5)删除本地svn存储目录date里的文件,后选择SVN Update

        我们会发现,刚刚删除的文件又重新下载回来了

      (6)继续删除本地svn存储目录data里的文件,后选择SVN Commit

      

      (7)再次查看服务器端存储目录里,发现文件已经被删除了

      

      3.2 SVN的管理命令(linux)

     1 [root@SVN-gaowei conf]# 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)                   #下载数据
    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
    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
    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/

      3.2.1 从SVN库提取数据

     1 [root@SVN-gaowei ~]# mkdir yunjisuan
     2 [root@SVN-gaowei ~]# cd yunjisuan/
     3 [root@SVN-gaowei yunjisuan]# pwd
     4 /root/yunjisuan
     5 
     6 #下载服务器端数据到Linux本地目录
     7 [root@SVN-gaowei yunjisuan]# svn co svn://192.168.200.130/yunjisuan/ /root/yunjisuan/ --username=benet --password=123123
     8 A    /root/yunjisuan/gaowei11.txt.txt
     9 Checked out revision 4.
    10 [root@SVN-gaowei yunjisuan]# ll
    11 total 0
    12 -rw-r--r--. 1 root root 0 Nov 26 09:10 gaowei11.txt.txt

      3.2.2 查看SVN版本库中的数据

    1 [root@SVN-gaowei yunjisuan]# svn list file:///application/svndata/yunjisuan/
    2 gaowei11.txt.txt

     四,大中小型企业上线解决方案

      4.1 小型公司代码上线案例(20台服务器以下)

      

      特点与问题: 

    1. 发布快,及时,随时随地就可以发布代码。
    2. 开发人员发布的代码不经过测试人员的测试,且用户访问页面刷新后页面即改变,也可能刷新瞬间程序在更新,到时无法访问,对网站用户的体验比较差,如果开发写错了代码,造成的影响就更大了,这是拿用户作为测试的上线方案。
    3. 据统计,网站中大概50%以上的故障是和开发程序代码有关的,(比如:开发写错了一个循环代码,导致了死循环,此时大量用户访问这个程序,就能把服务器资源耗尽,搞死服务器)
    4. 在中小公司网站出了问题一般是运维人员的问题(例如网站宕机),但这种情况下,问题大多可能由开发人员或代码引起的,这里比较好的策略是开发项目负责制思想

      4.2 中型企业上线解决方案

      中型企业上线,一般是规范运维人员操作步骤,制定统一的上线操作脚本,备份文件名称,备份文件路径。使操作人性化,统一化,自动化。

      

      4.3 大型企业上线解决方案

      大型企业上线一般制度和流程控制较多,比较严谨,下面是某大型企业上线解决方案架构:

      

  • 相关阅读:
    cookie 保存信息 例子
    win7 远程桌面 不用域账户登录
    jfreechart demo 源代码 下载
    PostgreSQL学习手册(数据表)
    apache tomcat 伪静态 struts2 伪静态
    List methods
    DX 骨骼动画
    如何成为一名优秀的程序员?
    程序员改编游戏向女友求婚
    引用 病毒是怎么命名的?教你认识病毒命名规则
  • 原文地址:https://www.cnblogs.com/gaowei123/p/10018344.html
Copyright © 2020-2023  润新知