持续集成(Continuous integration,简称CI)系统在软件自动化构建(包括编译、发布、自动化测试)方面有着重要的作用,在之前,前端项目简单,很多时候发布都只是一些简单的拷贝,而随着webpack web打包工具的诞生,前端项目越来越复杂,大多数项目都需要一个构建的流程,在这个时候我们自然而然想到了jenkins,于是将前端项目也集成到了jenkins, 事情到这里还算完美,直到有一天.......

那还是我在上一家公司时候,有一天我突然了解到公司的前端团队项目打包发布是用自己写的一套打包系统之后,我很惊讶,为什么不用jenkins? 才发现,其实很多只做过前端的并不是很了解持续集成这些,想来也是,前端之前的开发模式基本都不用打包构建,发布时都是把所有的模板、资源打包(压缩)发给运维。于是我看了一下他们那个打包的系统,也只是可以完成线上打包的功能,对实时日志、构建队列、构建触发器等都不支持,于是我就开始给他们安利jenkins,但是,现有的系统系统虽然简陋但也能用,大家心里其实是拒绝的。强推应该不是上策,于是我就说如果现在这个构建系统能够支持实时日志和任务队列的话也是不错的,大家一看,这开发量可不小,还不如迁移到了jenkins呢, 于是前端的项目就迁移到了jenkins.......

故事到这里还没完。

没有什么能够阻挡人类的好奇心啊。事后我心里就想着如果能够我们自己做一个前端构建系统,要支持实时日志和任务队列,应该怎么做。

正巧,虽然jenkins本身功能很强大,但是,也有一点有些不足,就是打包日志不能像本地一样带有格式,如日志文字颜色、字体等,这样的话,就不能像在本地打包一样快速的定位错误。然后百度了一圈,发现有一个插件,叫 AnsiColor, 心中大喜,立马重新build,但是发现日志的格式化功能非常的弱,以一个vue工程为例,输出的日志本应显示红色的(构建过程出错)的都是黑色,真是差强人意。于是我就想着自己写一套前端专用的ci, 当然不是为了重复发明轮子,纯粹手痒。

要实现的目标

  1. 支持实时日志,并有良好的格式
  2. 支持任务队列
  3. 支持触发器

技术点:

  1. 任务队列可以在服务端维护一个全局的任务列表
  2. 实时日志用websocket将服务端的打包信息实时的同步到页面上
  3. 日志格式化可以百度 “ANSI控制码”,我们解析ANSI控制码来应用自定义样式。
  4. 触发器可以通过项目配置脚本,在关键点触发某个自定义脚本

于是写好就是这样的:


顶部是项目信息,红色乌云代表构建失败,绿色的太阳代表构建成功。


构建日志格式化。


构建过程中打印实时日志


与多个构建任务时,排队等候

总结

此项目是一个很好的练习项目,涉及前端、后台、websocket、shell脚本。个人觉得很适合做一个毕业设计或实习作业。现在这个项目已经是我们前端实习生的必做项目了。

招贤纳士

如果你是一个爱思考,爱动手,对编程有浓厚兴趣的欢迎私信我。

自己写一个H5项目CI系统相关推荐

  1. python写一个系统-使用Python写一个量化股票提醒系统

    大家在没有阅读本文之前先看下python的基本概念, Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开 ...

  2. 用python读取股票价格_使用Python写一个量化股票提醒系统

    大家在没有阅读本文之前先看下python的基本概念, Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开 ...

  3. python量化股票源码_使用Python写一个量化股票提醒系统

    大家在没有阅读本文之前先看下python的基本概念, Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开 ...

  4. 【NLP】Pyhon+讯飞开放平台:​手把手带你写一个智能语音播报系统

    手把手带你写一个智能语音播报系统. 微信扫码登陆讯飞开放平台:https://www.xfyun.cn/ 完成个人认证. 在控制台创建应用,注意应用名称全库查重,很容易跟别人重复. 可查看到pytho ...

  5. python写炒股软件_使用Python写一个量化股票提醒系统

    大家在没有阅读本文之前先看下python的基本概念, Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开 ...

  6. python做运动控制_用 Python 写一个跟踪运动对象系统

    这个该死的家伙.我就知道他偷了我最后一罐啤酒! 对于一个男人来讲,这些话永远都不该说.但是当我关上冰箱门的时候,我愤怒地叹息,感到厌恶,自言自语地说了这些. 你看,我花了12个小时写了这篇将要发表的文 ...

  7. H5项目适配系统深色模式方案总结

    文章目录 一.背景 二.问题 三.H5项目适配深色模式方案 1.声明 color-scheme 1.1meta 1.2CSS 2.通过 CSS 媒体查询 3.图片适配 4. JavaScript中判断 ...

  8. H5项目适配系统深色模式方案

    一.背景 随着 iOS 13 的发布,深色模式(Dark Mode)越来越多地出现在大众的视野中,支持深色模式已经成为现代移动应用和网站的一个潮流,前段时间更是因为微信的适配再度引起热议.深色模式不仅 ...

  9. 整合Mybatis、Servlet、Mysql、Axios、Filter、Session写一个入门级项目:非常适合初接触JavaWeb的小白白来进阶

    文章目录 写在前言 写作收获&目的 目录结构 1 依赖配置 1.1 创建一个Web项目 1.2 Pom.xml 2 配置Mybatis 2.1 Mybatis-config.xml 2.2 U ...

最新文章

  1. 客快物流大数据项目(六十二):主题及指标开发
  2. python 天气预报
  3. 做产品最怕得是没有人负责
  4. boost::iostreams::example::container_sink用法的测试程序
  5. 深度学习(二十五)——Attention(2)
  6. Ubuntu Pycharm启动后卡住无法操作
  7. Linux为什么受欢迎?
  8. 今天中午的时候,可能是自己太忙过头了,所以出现了拿错卡去充值
  9. 20140213-面向对象技术概论
  10. php 得到服务器的数据$_SERVER
  11. 深入理解定时器系列第二篇——被誉为神器的requestAnimationFrame
  12. Matlab出错向量长度必须相同,代码已贴。错误使用plot3,向量长度必须相同
  13. DataX工具的基本使用
  14. c语言windows.h头文件详解
  15. 推荐5款干净又实用的软件
  16. 适合所有手环的app_Keep 手环评测:一只手环就能指导运动?Keep 想做你手腕上的魔鬼教练...
  17. 零基础入门学Python(十二)—— 魔法方法(下)
  18. Java Web GIS 地理信息系统开发
  19. 【数据结构】表达式建树
  20. 海思AI芯片(Hi3519A/3559A)方案学习(四)如何在3519A板子上运行sample code

热门文章

  1. Java多线程(3)--线程的生命周期
  2. 全国计算机三级数据库技术选择题,全国计算机三级《数据库技术》选择题训练2016...
  3. python 类中定义列表_Python-从类定义中的列表理解访问类变量
  4. php 随机钱数,PHP 仿微信红包金额随机
  5. 【Bootstrap】 框架 栅格布局系统设计原理
  6. POJ--3974 Palindrome(回文串,hash)
  7. win7下安装 python2 和python3
  8. Android项目开发填坑记-Fragment的onAttach
  9. jquery简单实现树形结构收缩展开效果
  10. [转]Oracle DB管理内存