首先在这里我要说很多,
需求:
1.我写任何脚本的核心要求就是必须得有一台跳板机,单方面认证即可
2.需要一台服务器挂载前台所有web站点
3.需要一个报警通知的接口
个人对自动的化上线的理解:
1.执行上线脚本就可以高枕无忧,把脚本放到后台就可以了
2.如何达到高枕无忧,svn自动化上线实现起来不简单
一.备份块
楼主在备份这块现在还是比较犹豫,楼主有两个想法
(1)不需要备份,可以利用-r+版本号回退到上一个版本,但是有弊端,比如测试经常会上错包,这个不能只靠着别人不犯错
(2)每台web全路径备份,回滚会很快,但是有些没有必要,比如我这次上线,只上个jsp文件,我也要全备份吗,这样务必会影响效率
楼主现在还是选择了第二个方案
二.上线块
1)svn上线会有自己的弊端,比如手动更新线上的文件,下次再更新此包就会出现G的问题,代表此文件没有更新成功
(2)svn上线如果之前版本库里没有此文件,而你又手动上了一个文件,在手动上线后,svn更新会报错
(3)楼主的前台web,有23台之多,分为6个集群,每个集群的路径和进程名都不同,如何实现判断每次更新的群组
(4)如此庞大的web集群,如何能够精简脚本的行数
三.检测块
(1)自动化的精髓就是检测,无检测何来的自动化
(2)检测前台集群所有web在上线过程中,500错是否正常
(3)检测前台nginx日志,500错是否正常
(4)检测svn上线是否文件都更新成功了,只针对上线文件比对md5码
下面贴上代码
第一部分上线篇
楼主有个公用函数脚本,这才是核心脚本
vim function.sh
#!/bin/bash
one=$1
two=$2
three=/svnlog/$3
date=`date +%Y%m%d%H%M`
function youyuanjar(){
echo "--------------------------resin restart--------------------------------" 2>&1 | tee -a /tmp/shangxianlog/svn.$one
echo "---------------------------------$one------------------------------------" 2>&1 | tee -a /tmp/shangxianlog/svn.$one
ssh $two "sh /usr/local/resin/bin/resin.sh stop -server youyuan" 2>&1 | tee -a /tmp/shangxianlog/svn.$one
echo "$one stopped" 2>&1 | tee -a /tmp/shangxianlog/svn.$one
sleep 3
ssh $two "cp -rf /www/youyuan.com.1/htdocs /opt/$date"
e=`cat $three |grep -v Updated|awk -F "/" '{print $(NF-1)"/"$NF}'`
for i in $e
do
ssh $two "rm -f /www/youyuan.com.1/$e"
if [ "$?" -eq 0 ]; then
echo delet ok
fi
done
ssh $two "svn up $svnversion /www/youyuan.com.1/htdocs" 2>&1 | tee -a /tmp/shangxianlog/svn.$one
echo "$one svnup ok " 2>&1 | tee -a /tmp/shangxianlog/svn.$one
sleep 15
b=($(cat $three |grep -v Updated|awk -F "/" '{print $NF}'|awk -F "." '{print $1}'))
c=($(cat $three |grep -v Updated|awk -F "/" '{print $(NF-1)"/"$NF}'))
echo $c
for ((d=0;d<${#c[@]};d++))
do
touch /home/shangxianlog/${b[$d]}
a=`ssh $two "md5sum /www/youyuan.com.1/${c[$d]}"`
echo $two $a >> /home/shangxianlog/${b[$d]}
done
ssh $two "sh /usr/local/resin/bin/resin.sh restart -server youyuan" 2>&1 | tee -a /tmp/shangxianlog/svn.$one
sleep 20
echo "$one restart " 2>&1 | tee -a /tmp/shangxianlog/svn.$one
}
function iosjar(){
touch /tmp/shangxianlog/svni.$one
echo "--------------------------resin restart--------------------------------" 2>&1 | tee -a /tmp/shangxianlog/svni.$one
echo "---------------------------------$one------------------------------------" 2>&1 | tee -a /tmp/shangxianlog/svni.$one
ssh $two "sh /usr/local/resin/bin/resin.sh stop -server ios" 2>&1 | tee -a /tmp/shangxianlog/svni.$one
echo "$one stopped" 2>&1 | tee -a /tmp/shangxianlog/svni.$one
sleep 3
ssh $two "cp -rf /www/ios.youyuan.com/htdocs /opt/ios$three"
c=`cat $three |egrep '(ios|iosui|css|lib)'|grep -v Updated|awk -F "/" '{print $(NF-1)"/"$NF}'`
echo $c
for d in $c
do
ssh $two "rm -f /www/ios.youyuan.com/$d"
if [ "$?" -eq 0 ]; then
echo delet ok
fi
done
ssh $two "svn up $svnversion /www/ios.youyuan.com/htdocs/WEB-INF/lib" 2>&1 | tee -a /tmp/shangxianlog/svni.$one
ssh $two "svn up $svnversion /www/ios.youyuan.com/htdocs/WEB-INF/ios" 2>&1 | tee -a /tmp/shangxianlog/svni.$one
ssh $two "svn up $svnversion /www/ios.youyuan.com/htdocs/WEB-INF/iosui" 2>&1 | tee -a /tmp/shangxianlog/svni.$one
ssh $two "svn up $svnversion /www/ios.youyuan.com/htdocs/css/" 2>&1 | tee -a /tmp/shangxianlog/svni.$one
echo "$one svnup ok " 2>&1 | tee -a /tmp/shangxianlog/svni.$one
ssh $two "sh /usr/local/resin/bin/resin.sh restart -server ios" 2>&1 | tee -a /tmp/shangxianlog/svni.$one
sleep 20
echo "$one restart " 2>&1 | tee -a /tmp/shangxianlog/svni.$one
}
function ios(){
touch /tmp/shangxianlog/svni.$one
echo "---------------------------------$oneios------------------------------------" 2>&1 | tee -a /tmp/shangxianlog/svni.$one
ssh $two "cp -rf /www/ios.youyuan.com/htdocs /opt/ios$three"
c=`cat $three |egrep '(ios|iosui|css)'|grep -v Updated|awk -F "/" '{print $(NF-1)"/"$NF}'`
echo $c
for d in $c
do
ssh $two "rm -f /www/ios.youyuan.com/$d"
if [ "$?" -eq 0 ]; then
echo delet ok
fi
done
ssh $two "svn up $svnversion /www/ios.youyuan.com/htdocs/WEB-INF/ios" 2>&1 | tee -a /tmp/shangxianlog/svni.$one
ssh $two "svn up $svnversion /www/ios.youyuan.com/htdocs/WEB-INF/iosui" 2>&1 | tee -a /tmp/shangxianlog/svni.$one
ssh $two "svn up $svnversio

