svn提交自动更新web服务器

当WEB服务使用了负载均衡之后,发布代码就没有单机发布那么简单了。

单机的时候,可以本地开发测试通过,提交svn,然后ssh到服务器上,再服务器上svn up下,即可更新代码了。

但是当web服务后端由多台机器来提供服务的时候,这个方法就有点太慢了,如果开发人员一旦忘记了,那就惨了。

当然上面说的是小作坊的方式。大团队有更多人力精力研究自动化部署那肯定更好啦。

当初给朋友设计的是采用svn,truck目录有更新,利用svn的post-commit钩子脚本在每次提交commit操作后自动运行来自动更新web服务器上的代码。


环境介绍下:svn服务是在一个web服务器上搭建的,还有另外一个web服务器。
svn有提交,自动更新跟svn在同一个服务器上的web代码,然后ssh到另外一个服务器上,执行svn up命令。
这个前提是需要让web服务器之间可以ssh免密登录

<br />
#!/bin/sh   </p>
<p>REPOS="$1"                              # 仓库的路径<br />
REV="$2"                                # 新提交的版本号<br />
LOGFILE=/data/svnlog/autoUpdate.log     # 钩子脚本的日志   </p>
<p>export LANG='zh_CN.UTF-8'               # 设置本地字符集编码,防止乱码</p>
<p># 脚本的标准输出和标准错误输出都打印到日志文件里<br />
exec 1>>"$LOGFILE"<br />
exec 2>&1   </p>
<p>SVN=/usr/bin/svn<br />
SVNLOOK=/usr/bin/svnlook<br />
TIME=$(date "+%Y-%m-%d %H:%M:%S")           # 时间<br />
AUTHOR=$($SVNLOOK author -r $REV "$REPOS")  # 提交作者<br />
CHANGEDDIRS=$($SVNLOOK dirs-changed $REPOS) # 修改的目录集合<br />
MESSAGE=$($SVNLOOK log -r $REV "$REPOS")    # 提交时的备注信息,不建议用中文   </p>
<p># SVN客户端配置,需要自行修改**********************************<br />
SERVERA=qr149        #服务器</p>
<p>WEBROOT=/data/wwwroot/webroot/api    #WEB服务器的代码根目录<br />
SVNUSER="publish"<br />
SVNPASSWD="password"<br />
#**************************************************************   </p>
<p>function myecho() {<br />
    echo "$TIME" "$*"<br />
}   </p>
<p>myecho "**************************************************************"<br />
myecho "Start By `whoami`"<br />
myecho "提交版本:$REV 作者:$AUTHOR"<br />
myecho "提交备注:$MESSAGE"<br />
myecho "修改目录:$(echo $CHANGEDDIRS | tr '\n' ' ')" </p>
<p>MASTERDIR=$(echo "$CHANGEDDIRS" | head -1)  #CHANGEDDIRS里的主目录<br />
# 遍历提交的代码目录,同步到WEB服务器上   </p>
<p>DIR=$(echo $MASTERDIR | awk -F / '{print $1}')<br />
# 判断项目文件夹<br />
if [ "$DIR" == "truck" ];then<br />
    myecho<br />
    myecho "Truck目录被更新";<br />
    myecho "开始同步本地";<br />
    # --no-auth-cache 阻止在Subversion管理区缓存认证信息(如用户名密码)<br />
    # --non-interactive 如果认证失败,或者是不充分的凭证时,防止出现要求凭证的提示(例如用户名和密码)。这在运行自动脚本时非常有用,只是让Subversion失败而不是提示更多的信息<br />
    $SVN update $WEBROOT --username $SVNUSER --password $SVNPASSWD --no-auth-cache --non-interactive<br />
    chown -R www:www  $WEBROOT<br />
    chmod -R 775 $WEBROOT<br />
    myecho "开始同步另外一台服务器";<br />
    # 无密码ssh连接到客户端服务器,执行svn up<br />
    /usr/bin/ssh [email protected]$SERVERA "export LANG=en_US.UTF-8; svn update '$WEBROOT' --username $SVNUSER --password $SVNPASSWD --no-auth-cache --non-interactive >> '$LOGFILE';chown -R www:www  '$WEBROOT'; chmod -R 775 '$WEBROOT'"<br />
else<br />
    myecho "非Truck目录更新,服务器端忽略"<br />
fi<br />

日志如下:
<br />
2018-03-10 22:12:32 **************************************************************<br />
2018-03-10 22:12:32 Start By root<br />
2018-03-10 22:12:32 提交版本:23 作者:naodai<br />
2018-03-10 22:12:32 提交备注:合并了修改版本号 从 truck:<br />
2018-03-10 22:12:32 修改目录:branches/v1/ branches/v1/system/<br />
2018-03-10 22:12:32 非Truck目录更新,服务器端忽略<br />
2018-03-10 22:19:45 **************************************************************<br />
2018-03-10 22:19:45 Start By root<br />
2018-03-10 22:19:45 提交版本:24 作者:naodai<br />
2018-03-10 22:19:45 提交备注:合并了修改版本号 从 branches/v1/system:<br />
2018-03-10 22:19:45 修改目录:truck/system/ truck/system/backend/controllers/ truck/system/backend/models/ truck/system/backend/views/ truck/system/backend/views/layouts/ truck/system/backend/w<br />
eb/ truck/system/common/config/<br />
2018-03-10 22:19:45<br />
2018-03-10 22:19:45 Truck目录被更新<br />
2018-03-10 22:19:45 开始同步本地<br />
A    /data/wwwroot/xxx<br />
U    /data/wwwroot/xxx<br />
U    /data/wwwroot/xxx<br />
 U   /data/wwwroot/xxx/system<br />
更新到版本 24。<br />
2018-03-10 22:19:45 开始同步149服务器<br />
2018-03-10 22:21:19 **************************************************************<br />
2018-03-10 22:21:19 Start By root<br />
2018-03-10 22:21:19 提交版本:25 作者:naodai<br />
2018-03-10 22:21:19 提交备注:db config<br />
2018-03-10 22:21:19 修改目录:truck/system/common/config/<br />
2018-03-10 22:21:19<br />
2018-03-10 22:21:19 Truck目录被更新<br />
2018-03-10 22:21:19 开始同步215本地<br />
U    /data/wwwroot/xxx/api/system/common/config/main-local.php<br />
更新到版本 25。<br />
2018-03-10 22:21:19 开始同步149服务器<br />
2018-03-10 23:58:10 **************************************************************<br />
2018-03-10 23:58:10 Start By root<br />
2018-03-10 23:58:10 提交版本:26 作者:aaa<br />
2018-03-10 23:58:10 提交备注:当面<br />
2018-03-10 23:58:10 修改目录:branches/v1/v1/ branches/v1/v1/tool/dangmianfu/aop/<br />
2018-03-10 23:58:10 非Truck目录更新,服务器端忽略<br />
2018-03-11 00:22:12 **************************************************************<br />
2018-03-11 00:22:12 Start By root<br />
2018-03-11 00:22:12 提交版本:30 作者:aaa<br />
2018-03-11 00:22:12 提交备注:当面付<br />
2018-03-11 00:22:12 修改目录:truck/v1/ truck/v1/tool/dangmianfu/f2fpay/service/<br />
2018-03-11 00:22:12<br />
2018-03-11 00:22:12 Truck目录被更新<br />
2018-03-11 00:22:12 开始同步215本地<br />
U    /data/wwwroot/xxx/api/v1/create.php<br />
U    /data/wwwroot/xxx/api/v1/tool/dangmianfu/f2fpay/service/AlipayTradeService.php<br />
 U   /data/wwwroot/xxx/api/v1<br />
更新到版本 30。<br />
2018-03-11 00:22:12 开始同步149服务器<br />
2018-03-11 01:07:19 **************************************************************<br />
2018-03-11 01:07:19 Start By root<br />
2018-03-11 01:07:19 提交版本:31 作者:aaa<br />
2018-03-11 01:07:19 提交备注:当面付<br />
2018-03-11 01:07:19 修改目录:branches/v1/v1/<br />
2018-03-11 01:07:19 非Truck目录更新,服务器端忽略<br />
2018-03-11 01:07:47 **************************************************************<br />
2018-03-11 01:07:47 Start By root<br />
2018-03-11 01:07:47 提交版本:32 作者:aaa<br />
2018-03-11 01:07:47 提交备注:当面付<br />
2018-03-11 01:07:47 修改目录:truck/v1/<br />
2018-03-11 01:07:47<br />
2018-03-11 01:07:47 Truck目录被更新<br />
2018-03-11 01:07:47 开始同步215本地<br />
U    /data/wwwroot/xxx/api/v1/create.php<br />
U    /data/wwwroot/xxx/api/v1/notifyUrlMinshengBank.php<br />
 U   /data/wwwroot/xxx/api/v1<br />
更新到版本 32。<br />
2018-03-11 01:07:47 开始同步149服务器<br />
2018-03-11 01:14:38 **************************************************************<br />
2018-03-11 01:14:38 Start By root<br />
2018-03-11 01:14:38 提交版本:33 作者:aaa<br />
2018-03-11 01:14:38 提交备注:当面付<br />
2018-03-11 01:14:38 修改目录:branches/v1/v1/<br />
2018-03-11 01:14:38 非Truck目录更新,服务器端忽略<br />

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.