自己写一个H5项目CI系统

持续集成(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脚本。个人觉得很适合做一个毕业设计或实习作业。现在这个项目已经是我们前端实习生的必做项目了。

招贤纳士

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/366819.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

25.QT-模型视图

模型视图设计模式的核心思想 使模型(数据)与视图(显示)相分离模型只需要对外提供标准接口存取数据,无需数据如何显示视图只需要自定义数据的显示方式,无需数据如何组织存储当数据发生改变时,会通过信号通知视图当用户与视图进行交互时,会通过信号向模型发送交互信息 在QT中提供…

休眠事实:多级访存

在多个级别上检索根实体及其子关联是很常见的。 在我们的示例中,我们需要加载一个包含其树,分支和叶子的森林,并且我们将尝试查看Hibernate对于三种集合类型的行为:集合,索引列表和包。 这是我们的类层次结构的样子&…

前5个有用的隐藏Eclipse功能

Eclipse是野兽。 仅凭其力量才能超越其神秘感的设备。 有人将其称为连续体跨功能器 。 其他人则称它为透湿器 。 是的,它是如此之大,需要花费数年才能掌握。 然后,您的经理出现并告诉您:我们正在使用NetBeans。 开玩笑。 除了Ada…

linux如何解除密码,如何在Linux下解除PDF文件的密码?

【51CTO.com快译】今天,我碰巧与一位朋友共享一个受密码保护的PDF文件。我知道该PDF文件的密码,但不想透露。相反,我只想解除密码,将文件发送给朋友。于是我开始在网上找一些简单的方法,好解除PDF文件的密码保护。上网…

C#中结构体定义并转换字节数组

ref: https://www.cnblogs.com/dafanjoy/p/7818126.html C#中结构体定义并转换字节数组 最近的项目在做socket通信报文解析的时候,用到了结构体与字节数组的转换;由于客户端采用C开发,服务端采用C#开发,所以双方必须保证各自定义结…

2018移动端页面适配-自适应最新方案直接写px--------通过gulp工作流搭建一体化的移动端开发环境

1.开始 在flexible的GitHub上面写着 由于viewport单位得到众多浏览器的兼容,lib-flexible这个过渡方案已经可以放弃使用,不管是现在的版本还是以前的版本,都存有一定的问题。建议大家开始使用viewport来替代此方案。vw的兼容方案可以参阅《如…

jclouds的命令行界面

序幕 我使用和为jclouds贡献了一年多的时间。 到目前为止,我已经在很多领域广泛使用了它,尤其是在Fuse生态系统中 。 它的强大之处在于它缺少一件事,该工具可用于管理jclouds也提供访问权限的任何云提供商。 类似于EC2命令之类的工具&#xf…

中兴linux下载软件,国产操作系统中兴新支点使用WPS For Linux办公软件的体验报告...

以下将给你带来在国产操作系统中兴新支点操作系统下使用WPS For Linux办公软件的体验报告,WPS For Linux提供Deb、Rpm、Tar.xz、Snap软件包,你可以选择Tar.xz源码包编译安装,或在系统自带的软件中心下安装,也可以参考采用snap方式…

Java 教程(开发环境配置+基础语法)

Java 开发环境配置 在本章节中我们将为大家介绍如何搭建Java开发环境。 window系统安装java 下载JDK 首先我们需要下载java开发工具包JDK,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html,点击如下下载按钮&am…

数据采集工具Telegraf:简介及安装

接着上一篇博客:InfluxDB简介及安装,这篇博客介绍下Linux环境下Telegraf安装以及其功能特点。。。 官网地址:influxdata 官方文档:telegraf文档 环境:CentOS7.4 64位 Telegraf版本:0.11.1-1 一、Telegraf介…

初探小程序插件

插播公司招聘信息: https://cnodejs.org/topic/5a915706653c43b914684f90 小程序插件可以干嘛? 周二晚上(3.13)的一个小程序新功能发布了-【小程序插件】,一开始以为是小程序发布了类似npm的组件管理工具,…

从mysql向HBase+Phoenix迁移数据的心得总结

* 转载请注明出处 - yosql473 - 格物致知,经世致用 mysql -> HBase Phoenix 1.总体方案有哪些? 1)通过Sqoop直接从服务器(JDBC方式)抽取数据到HBase中 因为数据量非常大,因此优先考虑用Sqoop和MR抽取。 使用Sqoop抽取数据有一…

玩转异步 JS :async/await 简明教程(附视频下载)

课程介绍 在软件开发领域,简洁的代码 > 容易阅读的代码 > 容易维护的代码,而 ES2017 中的 async/await 特性能让我们编写出相比回调地狱和 Promise 链式调用更直观、更容易理解的代码,await 关键字接收一个 Promise,等待代码…

分享轮子-flutter下拉刷新上拉加载

flutter下拉上拉组件轮子 什么是flutter? 首先说下flutter,估计这个应该挺多人没听过flutter这个框架,它是一个google推出的跨平台的移动应用UI框架,和React Native是同样的目的,支持三大平台:Android,Ios,还有一个是google新出的系统,忘了叫什么...本人React Native也是用过…

(8)Python判断结构

转载于:https://www.cnblogs.com/hankleo/p/9170325.html

History of program(1950-2020)

1957年 约翰巴科斯(John Backus)创建了是全世界第一套高阶语言:FORTRAN。 John Backus1959年 葛丽丝霍普(Grace Hopper)创造了现代第一个编译器A-0 系统,以及商用电脑编程语言“COBOL”,被誉为C…

关于 Nuxt 集成ueditor的一些坑(包括图片上传)前端部分

最近公司接了一个项目,里面用到富文本编辑器,刚开始用的是vue-quill-editor,这个编辑器轻量、好用。最重要的是它有专门正对nuxt的版本,很容易配置,可以放心使用,不用担心bug之类的,遇到问题&am…

*Codeforces989D. A Shade of Moonlight

数轴上$n \leq 100000$个不重叠的云,给坐标,长度都是$l$,有些云速度1,有些云速度-1,风速记为$w$,问在风速不大于$w_{max}$时,有几对云可能在0相遇。每一对云单独考虑。 多动一不动--相对运动。假…

undefined reference 问题各种情况分析

扒自网友文章 关于undefined reference这样的问题,大家其实经常会遇到,在此,我以详细地示例给出常见错误的各种原因以及解决方法,希望对初学者有所帮助。 1. 链接时缺失了相关目标文件(.o) 测试代码如下&a…

2018-2019-1 20165203 《信息安全系统设计基础》第六周学习总结

2018-2019-1 20165203 《信息安全系统设计基础》第六周学习总结 教材学习内容总结 重要知识点 I/O:在主存和外部设备(例如磁盘存储器、终端和网络)之间复制数据的过程。输入操作:从I/O设备复制数据到主存。输出操作:从…