背景
目前项目从mac上发布到测试环境需要经过上面的6个步骤,都是通过人工输入的shell以及git命令完成的,即便现在再熟悉了,也需要花个几分钟来编译打包,所以基于此编写了一套shell脚本来完成上述的6个步骤,达到自动化编译打包的目的。
代码
以下的huiyan-front 为源码库,huiyan_web为发布库
其中,需要修改源码库的一个文件的域名
#!/bin/sh
# ys-shell.sh
#
#
# Created by liuyuqin on 2017/12/20.
#
echo "******************自动化运行脚本*****************"
echo "*****功能:编译最新代码到验收环境(staging/huiyan_web)*****"
function recursive_copy_file(){
dirlist=$(ls $1)
for name in ${dirlist[*]}
do
if [ -f $1/$name ]; then
# 如果是文件,并且$2不存在该文件,则直接copy
if [ ! -f $2/$name ]; then
cp $1/$name $2/$name
fi
elif [ -d $1/$name ]; then
# 如果是目录,并且$2不存在该目录,则先创建目录
if [ ! -d $2/$name ]; then
mkdir -p $2/$name
fi
# 递归拷贝
recursive_copy_file $1/$name $2/$name
fi
done
}
source_dir="/Users/aaa/HY/huiyan-front/huiyan-web"
dist_dir="/Users/aaa/HY/huiyan-front/huiyan-web/dist"
dest_dir="/Users/aaa/HY/staging/huiyan_web/src/main/webapp"
# 切换home目录
cd ~
# 切换huiyan-front目录
cd ${source_dir}
# 更新代码
echo "*****开始更新代码 代码库:huiyan-front*****"
git pull
# 修改xx.jd.com改成xxb.jd.com
cd /Users/aaa/HY/huiyan-front/huiyan-web/src/views
echo "*****开始修改源码文件中的huiyan.jd.com为huiyanb.jd.com*****"
sed -i "" "s/xx.jd.com/xxb.jd.com/g" globalConfig.js
sed -i "" "s/xx.jd.com/xxb.jd.com/g" globalConfig.js
# dist打包
echo "*****开始dist打包*****"
gulp dist
# 修改xxb.jd.com改成xx.jd.com
cd /Users/aaa/HY/huiyan-front/huiyan-web/src/views
echo "*****开始修改源码文件中的huiyan.jd.com为huiyanb.jd.com*****"
sed -i "" "s/xxb.jd.com/xx.jd.com/g" globalConfig.js
sed -i "" "s/xxb.jd.com/xx.jd.com/g" globalConfig.js
# 删除目标文件夹
echo "*****开始删除验收文件夹(huiyan_web)*****"
cd ${dest_dir}
shopt -s extglob
rm -fr !(WEB-INF)
git add -A
git commit -m "delete by mac-user at `date '+%Y-%m-%d %H:%M:%S'`"
git push
# 复制文件
echo "*****开始复制文件*****"
echo "*****From:huiyan-front/huiyan-web/dist*****"
echo "*****To: huiyan_web/src/main/webapp*****"
recursive_copy_file $dist_dir $dest_dir
git add -A
git commit -m "create by mac-user at `date '+%Y-%m-%d %H:%M:%S'`"
git push
echo "------------------------------------------"
echo "- "
echo "- ALL DONE SUCCESS 输入任意键关闭脚本 "
echo "- "
echo "------------------------------------------"
read anykey