一、背景
由于公司项目前端主要涉及小程序端和h5端,小程序主要是前端同学自己发布代码到微信服务器,h5端主要是一些后台管理系统代码,会涉及到频繁更新;前端更新的本质就是替换文件,我们的更新流程是从测试更新到灰度,然后从灰度更新到生产。
二、从测试更新到灰度
2.1 项目参数
1.需要更新的项目,可以传入多行数据
2.项目运行节点,221为灰度机器
2.2 执行时shell
1.判断project中是否包含".",如果不包含"."就更新目录,反之更新文件
#!/bin/sh
cd /opt/www
for project in $projects
do
biaoji="."
if [[ "$project" =~ "$biaoji" ]]; then
mgtype="file"
else
mgtype="menu"
fi
echo "$project is $mgtype"
if [ "menu" == "$mgtype" ]; then
if [ -d $project ]; then
echo "$project is exist"
else
mkdir -p $project
fi
rm -rf $project/*
echo "sshpass -p 123456 scp -r -P 3721 [email protected]:/opt/www/$project/* $project/"
sshpass -p "123456" scp -r -P 3721 [email protected]:/opt/www/$project/* $project/
else
echo "sshpass -p \"123456\" scp -r -P 3721 [email protected]:/opt/www/$project $project"
sshpass -p "123456" scp -r -P 3721 [email protected]:/opt/www/$project $project
fi
done
三、从灰度更新到生产
3.1 项目参数
1.是否需要备份
2.需要更新的项目,可以传入多行目录
3.项目运行节点,10.8.0.8为A环境nginx
3.2 执行时shell
1.判断是否需要备份
2.根据是否含有“.”标记判断更新目录还是文件
#!/bin/sh
today=`date "+%Y%m%d-%H%M"`
mkdir /bak/www-$today
who
echo "$today"
cd /nginx/www
for project in $projects
do
biaoji="."
if [[ "$project" =~ "$biaoji" ]]; then
mgtype="file"
else
mgtype="menu"
fi
if [ "yes" == "$backup" ]; then
if [ "menu" == "$mgtype" ]; then
mkdir -p /bak/www-$today/$project
else
mkdir -p /bak/www-$today/${project%/*}
fi
cp -r /opt/www/$project /bak/www-$today/
fi
echo "$project is $mgtype"
if [ "menu" == "$mgtype" ]; then
if [ -d $project ]; then
echo "$project is exist"
else
mkdir -p $project
fi
pwd
echo 'sshpass -p "Mogupro0601sz" scp -r [email protected]:/opt/www/'$project'/* '$project'/'
sshpass -p "Mogupro0601sz" scp -r [email protected]:/opt/www/$project/* $project/
else
echo 'sshpass -p "Mogupro0601sz" scp -r [email protected]:/opt/www/'$project' '$project
sshpass -p "Mogupro0601sz" scp -r [email protected]:/opt/www/$project $project
fi
done