利用SVN将开发服务器的代码部署到线上服务器

环境:

开发机:SVN(代码库)+LNMP测试环境

web服务器:LNMP生产环境


web服务器:
#rpm -qa |grep rsync    //检查是否安装rsync

密码文件
#vim /etc/rsyncd.secrets     //密码文件
www:pwd                    //用户密码冒号隔开


配置文件
#vim /etc/rsyncd.conf
secrets file = /etc/rsyncd.secrets
[ylw]
uid = www
gid = www
path = /data/htdocs/ylw
comment = ylw
ignore errors
list = yes
auth users = www
read only = no
hosts allow = 192.168.1.2/24
hosts deny = *


开发机:
#rpm -qa |grep rsync    //检查是否安装rsync

密码文件
#vim /etc/rsyncd.pwd        //密码文件
pwd                        //只输入密码


SVN项目(ylwkj)钩子,如下


#!/bin/sh
#export LANG="zh_CN.UTF-8"
export LANG="en_US.UTF-8"
SVN=/usr/bin/svn
WEB=/data/htdocs/ylw/
$SVN update $WEB --no-auth-cache --non-interactive --username 123 --password 123



if (svnlook log /data/svn/reposdata/ylw/ | grep "ylw_deploy" > /dev/null 2>&1)
        then
        /usr/bin/rsync -arz /data/htdocs/ylw/ [email protected]::ylw --exclude-from=/etc/exclude.list --password-file=/etc/rsyncd.pwd  >> /data/logs/rsync.log
                if [[ $? -eq 0 ]];
                then
                echo "ylwkj deploy to 192.168.1.2 complete!!!"
                echo "`date` auto deploy project ylw complete!!!" >> /data/logs/deploy.log
                else
                echo "ylwkj deploy to 192.168.1.2 complete fail"
                echo "`date` auto deploy project ylw faild!!!" >> /data/logs/deploy.log
                fi
        else
        echo "post-commit complete"
fi

PS:后面红色部分是自己加的,只要检测到提交注释里有ylw_deploy,就会启动rsync,来推送代码到web服务器,rsync第一次同步会慢一点,以后更新会很快.这里有个--exclude-from,里面写的是.svn,就是不推送.svn目录,这里sync用的是www用户,所以注意密码文件和exclude.list文件的读权限问题.




rsync推送参数常用

/usr/bin/rsync -arz /data/svn/repoback/ [email protected]::tongbu84 --password-file=/etc/rsyncd.pwd > /data/logs/scpsvn.log


 -v, --verbose 详细模式输出
 -q, --quiet 精简输出模式
 -a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
 -p, --perms 保持文件权限
 -o, --owner 保持文件属主信息
 -r, --recursive 对子目录以递归模式处理
 -g, --group 保持文件属组信息
 -t, --times 保持文件时间信息
 -z, --compress 对备份的文件在传输时进行压缩处理
--delete 删除那些DST中SRC没有的文件
--delete-excluded 同样删除接收端那些被该选项指定排除的文件
--delete-after 传输结束以后再删除


你可能感兴趣的:(我的运维笔记,Web平台)