1年前入职时,公司前端部门的静态代码部署都是用ftp工具拖拽部署,没有记录,没有关联,常常形成许多困扰的问题,前端
好比:今天有没有其余人在我要部署的路径上工做?个人代码为啥被盖掉了?被谁盖掉的?啥时候盖掉的?vue
本地build,ftp拖拽部署这种方式,致使git版本与手动的构建、部署没啥关联,更有在本地写完代码部署上去后,压根没传git这种失误可能发生。node
靠人去遵照规范来控制工做流,总会有失误、疏忽的发生。git
要靠机器和代码去规范工做流,提升效率、准确性,实现真正的前端工程化。shell
不讨论通用模板(项目开发层面),只关心构建之后的事情,精确的说,就是从npm run build:xxx 这个脚本开始对接,npm run build:xxx以前的事情不在本文讨论范围内。 实现构建-部署-测试(多个环境)-沙箱-上线(可回滚)的所有半自动化流程把控。npm
为何选择jenkins:优先选择强大的开源工具,避免重复造轮子,主要缘由是插件特别丰富,基本能够知足全部实际需求json
先把成果贴上来,总体示意图前端工程化
核心思想是分离构建、部署,因此每一个项目,jenkins会建两个job。api
jenkins服务部署在公司内网堡垒机上,使用tomcat管理jenkins的war包,占用系统服务、全量部署定时任务都跑在同一台堡垒机上(Linux)。tomcat
由于内容不少,因此我直接采用一张图 + 注释 来零碎的讲解每一个功能的实现,由于每一个公司的前端业务环境都不同,因此我也不打算花太大的笔墨去描述全部的实现。写这篇文章的目的就是可能某个思想、某一段对jenkins插件的使用等等会帮助到有相似需求的人。注释会是截图,或者是关键代码,对应图中的数字。
先放几张实际使用的图
jenkins项目界面部分截图
构建job部分截图
部署job部分截图(使用jenkins-pipeline实现流程图)
多套测试环境占用系统部分截图(占用环境后别人没法部署,全量脚本也不会覆盖)
全量部署脚本日志展现部分截图
总体示意图的注释(每一条都对应示意图中的红色阿拉伯数字):
check_results=`git log $branchName..origin/master`
if [[ ! $check_results = "" ]]
then
echo "【Error】:当前代码比master落后,须要合并master或更新代码从新打包以后才能进行构建!"
exit 1
else
echo "【info】:当前代码正常,能够部署!"
fi
复制代码
整篇文章比较零散,主要讲了一下我对前端工程化探索的思想和实践,由于手头的需求也不少(18年一块儿工做的好几个小伙伴被裁了,你猜他们剩下的工做谁来作),断断续续搞了两三个月,目前这套系统已经稳定运行几个月了,不断的完善使它如今很好用,线上不再会出现由于忘了某些分支操做致使的bug;这套系统的优势就是,基于开源jenkins+核心思想,就能够很快的经过node/shell/pipelinescript搭建起一套完整的系统,成本极低!超级实用的功能却实现不少!
若是你以为读完没啥收获或我写的实在不知所云,那就好好看看说明12,我以为把这一个小技巧分享出去,而且让你有所收获,那也值了,毕竟写做能力有限~