首页 > 建站教程 > 域名服务器 >  linux安装svn实现自动同步项目正文

linux安装svn实现自动同步项目

    本文一步一步具体阐述了如何实现linux下,安装svn实现项目自动同步。linux是阿里云的linux服务器。

////---- linux搭建SVN服务器 并且实现项目自动同步 本教程使用的是 阿里云 centerOs 7.1 ----////

零.ssh登录linux服务器
ssh root@你的服务器ip(ps:接着会让你输入密码,密码不显示,直接输完 enter 就行了)
.安装svn服务器端
yum install subversion
二.进入目录,准备创建svn目录
cd /usr/local/
.创建一个svn目录
mkdir svn
四.修改目录权限为777
chmod -R 777 svn
五.创建一个svn版本仓库first(first可以随便起名字)
svnadmin create /usr/local/svn/first 
六.进入first版本仓库下的配置文件目录
cd first/conf
七.编辑svnserve.conf配置文件
vim svnserve.conf   (基本常识:vim 编辑文件 进如按E编辑 编辑好后  按esc 后:W 保存 :q退出)

//配置版本库信息和用户文件和用户密码文件的路径、版本库路径
anon-access = none       //默认是只读read
auth-access = write      //认证后有写入权限
password-db = passwd     //帐号密码配置文件
authz-db = authz         //权限配置文件
realm = first            //改成自己的版本库 生效范围
八.编辑authz权限文件
vim authz

//文件,创建svn组和组用户的权限  
[group]  
first = ddl,shl       //创建一个first的组,并制定两个用户ddl和shl
 
[/]                   //制定根目录下的权限
@first = rw           //first组用户权限为读写  
* = r                 //其他用户只有读权限 
九.编辑passwd权限文件
vim passwd

//创建或修改用户密码
[users]
 
ddl = 123456    //用户名 = 密码  
shl = 123456    //用户名 = 密码
十.设置SVN服务开机自启动

    1. 在root目录加入svn.sh
touch /root/svn.sh
    2. 让后在svn.sh写入内容
vim /root/svn.sh

////----写入的内容----////

#!/bin/bash
/usr/bin/svnserve -d -r  /usr/local/svn/cnmiaosu

////----写入的内容----////
    3.  svn.sh该脚本添加可执行权限(非常重要)
chmod +x svn.sh
    4. 加入自动运行
        1.vim  /etc/rc.d/rc.local
            在末尾添加脚本的路径:
/root/svn.sh  //按esc 后:W 保存 :q退出
        2.最后 给 /etc/rc.d/rc.local 加入执行权限,因为在centos7中,/etc/rc.d/rc.local文件的权限被降低了,开机的时候执行在自己的脚本是不能起动一些服务的,执行下面的命令可以文件标记为可执行的文件
chmod +x /etc/rc.d/rc.local (非常重要)

十一.使用post-commit实现自动部署,实现本地提交svn后,自动同步服务器中项目

    1.打开hooks文件夹
cd /usr/local/svn/hooks
    2.复制post-commit.tmpl 文件为 post-commit
cp post-commit.tmpl post-commit
    3.打开post-commit文件
vim post-commit
    4.文件内容清空内容,修改为以下代码:
#!/bin/sh
export LANG=en_US.UTF-8
/usr/bin/svn update --username ddl --password 123456 /www/web/myweb

        注意: /usr/bin/svn                             是svn的路径,不是项目路径,应该都是一样的;
              --username ddl --password 123456         svn账户和密码
              /www/web/myweb                           项目路径(需要实时同步的项目)
    5.修改post-commit的可执行权限
chmod 755 post-commit
    6.在上面我见了一个svn版本库为first,但是这只是版本库,并没有项目,那么我们需要在版本库里面新建项目(也就是建立一个文件夹)

          这里推荐使用 windows 下面的 TortoiseSVN 客户端,打开版本库后右键 建立一个 《myweb》 项目文件夹,然后把所有的项目文件 拖入到 该文件夹内 上传svn服务器;
          注意:为什么不推荐用linux方式上传项目到svn服务器中,因为linux上传一个个文件上传很麻烦,所以推荐 TortoiseSVN 客户端 上传

    7.在服务器进入项目目录/www/web/myweb checkout 整个项目。

        注意此处不要checkout文件夹,正确代码应该是这样:
        svn checkout svn://{您的服务器地址}:{端口号}/myweb .   //注意目录后面还有一个点
十二.常见错误,我遇到的

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

十三.需要注意的问题;

    1.SVN版本库起动方式,现在svn下面有 first、test 两个版本库  
        1:单版本库起动    svnserve -d -r /usr/local/svnRepo/first
        2:多版本库起动    svnserve -d -r /usr/local/svnRepo

    2.如果使用的是阿里云服务器需要在《安全策略》中加入  3690 端口

    3.如果使用的是wdcp面板,需要在防火墙中加入  3690 端口

////---- 常用:svn命令 ----////
lsof -i :3690                               //查看svn是否启动
 
ps aux |grep 'svn'                       //查找所有svn启动的进程
 
kill -9 2505                                //杀死2505这个查找到的svn进程
 
svnserve -d -r /usr/local/svn/first   //启动svn

netstat -anp|grep svnserve         //查看一下SVN信息

svnserve --version                      //查看一下SVN版本

svn checkout svn://120.55.59.185/cmf_cnmiaosu_com .   //检出数据

////----- Mac下使用iTerm2让SSH记录远程服务器账号和密码 ----////

第一步:打开Finder,在菜单栏找到『前往』→ 『前往文件夹...』,输入:~/.ssh/ 然后回车

第二步:新建一个文件,命名为example吧,里面写入内容:
set user BS服务器账号
set host 服务器IP
set password 服务器密码

spawn ssh $user@$host
expect "*assword:*"
send "$password\r"
interact
expect eof

第三步:到官方http://www.iterm2.com/下载并打开iTerm2,菜单栏找到『Profiles』→『Open Profiles...』,打开面板上,点击右下角『Edit Profiles...』

第四步:在打开面板,左边BS应该是选中默认default,右边找到Command,默认应该是Login shell,选中Command,里面输入:expect ~/.ssh/example

第五步,下次打开iTerm2,是不是默认就登录上服务器了?极大提升效率。