linux centos svn 安装配置自动同步更新web服务

本文解决了centos 6.2 svn 安装 验证失败 authorization failed  等问题
是 linux 下 配置 syn 自动同步更新 web 服务,超详细的文章。


但是目前有一个问题未解决,由于shell解析变量额问题 导致 带空格的文件名 无法 同步更新




大家如果觉得文章好的话,可以转载。但是要保留原文地址,谢谢!


--------------------------------------------------------------------


yum 安装 subversion
                                                                                                             
#yum install subversion


                                                                                                             
查看版本信息 如果出现  svnserve,版本 1.6.11  则表示安装成功


                                                                                                             
#svnserve --version




-------------------------------------------------------------------------------------------




1、创建版本库


# 创建版本库之前需要把 /etc/init.d/svn 、/etc/svn/svnserve.conf、/etc/svn/passwd、/etc/svn/authz 文件放置到相应目录
# 具体配置内容在下面




# 修改 web 服务的 权限,使其可以运行/bin/bash ,home目录 设置为 /home/www
vi /etc/passwd
www:x:503:502::/home/www:/bin/bash


# 创建 svn 钩子 post=commit  日志文件,保证 web 服务帐号 有写入权限
touch /var/log/svn-post-commit.log && chown www:root /var/log/svn-post-commit.log


# 切换到 web 服务的帐号
su www


# 创建版本库,这里的 www 是 web 服务的帐号
svnadmin create /home/www/svn --config-dir /etc/svn


exit


---------------------------------------------------------------




2、启动服务


# 一定要切换到 web服务的执行用户 启动服务, 不然 自动同步更新的文件所属主,会自动变为运行服务的用户
su www


# 启动服务
service svn start


# 查看进程状态,确认运行 svnserve 进程的是 web 服务的帐号
ps -aux | grep svnserve


exit


----------------------------------------------------------------


3、修改 sudo 配置文件


chmod 777 && vi /etc/sudoers


# 添加 www 用户的 所有 sudo 请求
www     ALL=(ALL)       NOPASSWD: ALL


# 保存好之后
chmod 440 /etc/sudoers


----------------------------------------------------------------------------


4、检出版本库


# 切换用户
su www


# 检出 名称为 xiangmu1 的版本库 ,保存到 /home/wwwroot/web/xiangmu1


svn checkout svn://127.0.0.1/xiangmu1 /home/wwwroot/web/xiangmu1


 


-------------------------------------------------------------------------


5、设置 post-commit 钩子


# 将该脚本文件拷贝到 /home/svn/【项目目录】/hooks 下面


exit




--------------------------------------------------------------------------




6、如何添加更多的 svn 项目?


第一步: 创建项目版本库(参考上面)
第二步: 更改版本库项目授权(参考下面)
第三步: 检出版本库


--------------------------------------------------------------------------


7、如何添加更多的帐号


# 直接修改 /etc/svn/passwd


---------------------------------------------------------------------------


8、如何更改版本库项目 授权


# 直接修改 /etc/svn/authz




---------------------------------------------------------------------------


9、如何链接 svn


可以下载 svn 客户端
建议采用TortoiseSVN,


                                                                                     
连接地址为: svn://your server address/项目 (如果指定端口需要添加端口  :端口号)




-------------------------------------------------------------------------------


 


【以下是相关的文件】


--------------------


【/etc/init.d/svn  --  svn 启动服务脚本】
-----------------------------------------------------------------------------------------
#!/bin/bash
# 这里我把 nginx 使用的 www 用户下 svn 目录 做为,svn 的主目录
# 启动svn服务的时候,用www用户,这样可以保证版本库导出权限正常
# 配置文件使用 /etc/svn 下面的那几个,做为通用配置


START="sudo -u www svnserve -d -r /home/www/svn --config-file /etc/svn/svnserve.conf"
STOP="sudo killall svnserve"
case "$1" in
restart)
        $STOP
        echo "svn stop success."
        $START
        echo "snv start success."
        ;;
start)
        $START
        echo "svn start success."
        ;;
stop)
        $STOP
        echo "svn stop success."
        ;;
*)
      echo "Usage: $0 {restart | start | stop}"
      exit 1
esac
exit 1
-----------------------------------------------------------------------------------------


 


【/etc/svn/svnserve.conf  --  svn 配置文件】
属主 root:root
权限 744
------------------------------------------------------------------------------------------
[general]


# 使非授权用户无法访问
anon-access = none


# 使授权用户有写权限
auth-access = write


# 帐号及密码配置文件
password-db = /etc/svn/passwd


# 目录及版本库项目授权文件
authz-db = /etc/svn/authz


# 认证命名空间,subversion会在认证提示里显示,并且作为凭证缓存的关键字
realm = xinshang.working


[sasl]
# use-sasl = true
# min-encryption = 0
# max-encryption = 256


------------------------------------------------------------------------------------------




【/etc/svn/passwd  -- svn帐号文件】 
属主 www:root 
权限 744
------------------------------------------------------------------------------------------
[users]
svn = svn123456
user1 = xqw578
user2 = ah1345
user3 = bh8371
-----------------------------------------------------------------------------------------


 




【/etc/svn/authz  -- svn授权文件】 
属主 www:root 
权限 744
----------------------------------------------------------------------------------------
[groups]
group1 = user1,user2,user3 #group 组包含 3个用户 
group2 = user1,user2
group3 = user3


# r 只读, w 只写 , rw 可读写


[/] #表示全局权限,包含svn主目录下所有项目的
svn = rw # svn 是 svn root 可以读写整个 svn 目录,主要用于自动同步。




[xiangmu1:/] # svn 项目名称为 xiangmu1 的目录,允许组 group1 读写
@group1 = rw




[xiangmu2:/] # svn 项目名称为 xiangmu2 的目录,允许组 group2 读写
@group2 = rw


[xiangmu3:/] # svn 项目名称为 xiangmu3 的目录,允许组 group2、group3 读写
@group2 = rw
@group3 = rw
----------------------------------------------------------------------------------------


 




【post-commit  --  钩子文件】 自动导出版本库文件到web应用目录
----------------------------------------------------------------------------------------
#!/bin/bash


REPOS="$1"
REV="$2"
LOG=/var/log/svn-post-commit.log
APP_ROOT=/home/wwwroot/web/【项目目录】




export LANG=en_US.UTF-8


AUTHOR=`svnlook author -r $REV $REPOS`
if [ "$AUTHOR" == "edward" ] ; then
  exit;
fi




FULL_FILES=""
for DST in `svnlook changed -r $REV $REPOS | awk '{print $2}'`
do
        DST_PATH="$APP_ROOT/$DST"
        FULL_FILES="$FULL_FILES $DST_PATH"
done


TIME=`date '+%F %T'`


echo "[$TIME]--[$AUTHOR] svn commit file:" >> $LOG
echo $FULL_FILES >> $LOG


svn update --username 【svn root 帐号】 --password 【svn root 密码】 $FULL_FILES >> $LOG
----------------------------------------------------------------------------------------


【pre-commit  --  钩子文件】文件提交之前的检查,禁止提交带空格的文件名
----------------------------------------------------------------------------------------
#!/bin/bash


REPOS="$1"
REV="$2"


export LANG=en_US.UTF-8


# count commited file num


check=$(svnlook changed -t $REV $REPOS | awk 'NF!=2{for(i=2;i<=NF;i++)if(i!=NF)printf $i" ";if(i=NF)printf $i","}')




# compare files
if [ "$check" != "" ]
then
         check_del=$(svnlook changed -t $REV $REPOS  | awk '{for(i=1;i<NF;i++)if($i=="D")print $1}')
         if [ "$check_del" == "" ]
         then
                 echo "★★★★★★★★★★★★" 1>&2
                 echo "发现带空格的文件名:【${check}】" 1>&2
                 echo "请单独对其执行svn删除后," 1>&2
                 echo "重新尝试提交本次内容." 1>&2
                 echo "★★★★★★★★★★★★" 1>&2
                 exit 1
         fi
fi
exit 0
---------------------------------------------------------------------------------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值