阅读 2007

前端自动化部署之Shell

前言

众所周知前端是一个不善言辞并不会使用cmd的的一类人,开个玩笑!!!

前端项目发布流程

  • 开发新功能啦 -> 切新分支 git ck -b newBranch
  • 开发完成后 -> 提交代码 git add . git commit -m 'msg'
  • 合并到内外侧分支 -> 合并到 Rel 内外侧分支 git marge rel
  • 就拿 Vue React 项目来说,发布内外侧之前我们还需要将之前生产的代码给删除,不然体积会越来越大 rm -rf /linux目录路径~当前项目/*
  • 发布内外侧(还有个预发布),build - FileZilla | ZOC7 - 上传 不管你是拖拽,还是linux命令都可以,开心就好嘛

上面就是发布一个新功能的流程,可想而知,你让我一天做一次还能接受,要是隔几分钟来一次谁受得了?当然现实就是这样的操作隔几分钟就会来一次!!!
并且同时改几个项目也是存在的,所以,这种操作要把人整神...

说个故事

有一天我开发了一个功能,按照上面流程把代码发布到了内外侧,这时候测试姐姐测试了,发现我把登录写成登陆了,通知到我,你有一个超级严重的bug,需要现在改,改好就传,我收到这条指令,菊花不由得一紧,我当机立断切换分支,改起我的代码来,时间一分一秒过去,在一分钟的时间内我就改完bug,毕竟拧螺丝非常简单。

该上传代码了,上传操作用了我10分钟,在测试姐姐看来,我修改这个代码用了11分钟,测试姐姐心里肯定就在想这个菜逼,改个字要这么久?我等着这么烦,后面给他打分往低了打,哼~~,让某某前端崽儿拿不到奖金。

我也很无奈啊!!!

Shell 之 奖金收割者

由于经常被测试姐姐们打分很低,导致没有奖金可拿,导致我没办法去付我的房租,还我的花呗,请我喜欢的小姐姐吃大餐,最后导致我喜欢的小姐姐和我最讨厌的后端程序猿跑一起去了,我顿时心生恨意,我决定报复他,😁。

在星期五的下午,我通过企业微信给后端发了个消息,通知他下午决斗。  

大战一触即发

后端 技能 结果 技能 前端
 他上来丢使出了一记绝杀😏 Java大法 打平 Javascript(飞龙)在天 他居然一上来就丢绝杀😤
看来他不想与我浪费时间 😉
但是我也不是好惹的
我也使出了我的大招
 这人还有两下子喃
 那就别逼我了,看招
Spring初现
SpringBoot普照
都负伤 左拿Angular有悔
右提Vue取水
头顶React摆尾
他居然一秒打出了两招,我措不及防
还来不及思考就被打伤在地
说时迟那时快
只见他一跃而起,在天空中写下了 mvC...,
没等他耍完招式
我知道这招下来我必死无疑,我来不及多想
没办法了,我必须这样做了...
 话不投机半句多,来吧 微服务
容器
消息队列
分布式缓存
多线程并发
网络
中间件
皆元气大伤 Webpack
兼容
Koa
性能优化
Less/Sass
ES6789
TS
网络协议
可视化
去吧,皮卡丘
 没说话,只见他拿出了一本秘籍 五字风水阴阳秘术(Shell)  平手 空手接Shell 沉默不语,我知道我再也无力对抗
可是当他拿出此秘籍,我发现居然能为我所用
我用尽全身力气使出了我表哥教我的吸功大法
 前端是不会用命令行的页面仔,就一句话 此时无招胜有招  前端最后被命令行给干了 底气不足  我尼玛,我tm会 npm run serve

其实有很多后端在用的东西,前端都能拿来减少自己平时开发的重复工作,Shell就是其中一种。  

关于Shell知识的话,很多教程啦,去学习吧,我把我的脚本拿出来和大家交流交流。

我的自动化脚本

#!/bin/bash
set -e

if [ "$1"x != "devx" ] && [ "$1"x != "testx" ] && [ "$1"x != "prex" ];then
    echo -e "\033[41;37m 不存在 $1 环境  只有 -> dev(内测) test(外侧) pre(预发布) \033[0m"
    exit
fi

function devFn() {
    ssh root@ip rm -rf 服务器项目路径/*

    echo -e "\033[32m 连接成功,上传代码中... \033[0m"

    rsync -e "ssh -p 端口"  --exclude=storage -a  本地代码路径/dist/*      root@ip:服务器项目路径/

    echo -e "\033[32m 内测 上传成功 \033[0m\n"
}

function testFn() {
    ssh -p 端口 root@ip rm -rf 服务器项目路径/*

    echo -e "\033[32m 连接成功,上传代码中... \033[0m"

    rsync -e "ssh -p 端口"  --exclude=storage -a  本地代码路径/dist/*      root@ip:服务器项目路径/

    echo -e "\033[32m 外侧上传成功 \033[0m\n"
}

function preFn() {
    echo "执行链接预发布服务器"
}

function build() {
    cd source
    npm run build:$1

    echo -e "\033[32m 打包完毕 \033[0m"
    echo -e "\033[32m 连接 $1 服务器 \033[0m"

    if [ "$1"x == "devx" ];then
        devFn
    elif [ "$1"x == "testx" ];then
        testFn
    elif [ "$1"x == "prex" ];then
        preFn
    else
        echo -e "\033[41;37m 应该不会走到这里来吧... \033[0m"
        exit
    fi
}


#获取当前分支
branch=$(git symbolic-ref --short HEAD)

#判断是否是rel分支
if [ ${branch} == "rel" ];then
    echo -e "\n\033[32m 当前在rel分支\n 不出意外应该刚发布过内测\n 所以无需执行git操作\n 所以是否直接发布 $1 环境\033[0m"
    read -p $'\n\033[31m是否直接打包上传?y or n: \033[0m' isbuild
    if [ "$isbuild" != 'y' ];then
        exit
    fi
    build $1
else
    #此sh脚本只适用于单子发布rel环境,提醒
    echo -e "\n\033[31m dev(内测) test(外侧) pre(预发布) \033[0m"
    echo -e "\033[31m 当前需要发布 $1 环境 \033[0m"
    #询问是否继续发布当前环境
    read -p $'\n\033[31m是否继续操作?y or n: \033[0m' isVersion
    if [ "$isVersion" != 'y' ];then
        exit
    fi

    echo -e "\n\033[32m 已确认环境 \033[0m\n"
    echo -e "\033[31m $1 环境,当前分支为: ${branch} \033[0m"
    #确认当前分支,是否继续
    read -p $'\n\033[31m请确认分支,是否继续操作?y or n: \033[0m' isContinue
    if [ "$isContinue" != 'y' ];then
        exit
    fi

    echo -e "\n\033[32m 已确认分支,分支为 -> ${branch} \033[0m\n"
    echo -e "\033[32m 开始提交 ${branch} 分支代码,执行 add commit  \033[0m\n"
    git add .
    read -p $'\n\033[31m请输入本次commit信息:\033[0m' commitInfo
    git commit -m ${commitInfo}

    echo -e "\033[32m 开始切换分支 \033[0m\n"
    git checkout rel
    echo -e "\033[32m 开始拉取 rel origin \033[0m\n"
    git pull origin rel
    echo -e "\033[32m 开始 merge 修改至 rel \033[0m\n"
    git merge ${branch}

    #判断merge是否成功
    if [ $? == 0 ];then
        echo -e "\033[32m merge ${branch} -> rel 成功 \033[0m\n"
        echo -e "\n\033[32m 开始推送 rel 至远端 origin \033[0m\n"

        git push origin rel

        echo -e "\n\033[32m 推送 rel 至远端 origin 成功 \033[0m\n"
        echo -e "\n\033[32m 执行打包 \033[0m\n"

        build $1
        
    else
        echo -e  "\033[31m merge失败,请检查 \033[0m"
        exit
    fi
fi

复制代码

这样测试姐姐就不会说你慢啦,这也太快了吧!!!
是啊,太快了,测试姐姐也会不开心,这也太难了吧。。。

文章分类
前端
文章标签