小博无线CI系统演进之路

简介: 小博无线技术团队至2014年创建以来,这三年多以来所使用的CI系统经过数次升级换代,现已全部上云,全面实现了容器化和pipeline化,并引入了扁平和伸缩的实践来节省云计算成本。本文回顾了CI系统的成长历程。

小博无线技术团队至2014年创建以来,这三年多以来所使用的CI系统经过数次升级换代,现已全部上云,全面实现了容器化和pipeline化,并引入了扁平和伸缩的实践来节省云计算成本。本文回顾了CI系统的成长历程。

2014 - virtual box

2014年初,拼了一台16G内存的PC机,在上面开了多个virtual box,一个跑gitlab, 一个跑jenkins master, 剩下的几个就用于搭建build环境,作为jenkins的ssh slave。上线部署通过配置promotion plugin实现 - 先将build出来的release package scp到线上ecs, 再ssh运行一个安装升级脚本。

遇到的问题

  • virtual box比较重,很耗资源,16G内存也跑不了几个虚拟机
  • virtual box实例是长期存在的,每次build都要注意对应的cleanup操作,避免不同的build之间相互干扰
  • 每个虚拟机都需要单独的环境配置,复制成本高
  • scp+ssh的上线方式难以统一运作,基本上每个服务都需要定制;如果代码和配置都有变更,升级部署及回滚动作都可能相当复杂且风险较高

2015 - docker

2014年底,docker慢慢流行开来,容器比虚拟机要轻量很多,并且环境配置可以用Dockerfile很方便的以代码形式管理起来,我们便将原本以virtual box形式存在的jenkins slave都替换成了docker。

另外,将线上服务也容器化,将代码和配置统一装入一个docker image, 这样可以整体升级部署或回退,就消除了"代码和配置都有变更时,是先回滚配置,还是先回滚代码?"的难题。

遇到的问题

  • docker虽然解决了资源消耗的问题,但此时的docker仍然是作为长期存在的ssh slave来运行的,在build时仍然需要考虑对应的cleanup操作以避免不同的build之间相互干扰
  • 每个服务的相关CI配置仍然是用jenkins web ui进行配置,变更比较麻烦,并且需要jenkins的配置权限

2016 - Jenkins pipeline & docker plugin

6月份,办公室停了两次电,有一次竟长达两天!为了解决停电问题对上线迭代的影响,我们将位于办公室内的CI系统逐步迁移到了阿里云上。本地的数据备份和恢复是一件非常麻烦的事情,上云后,数据备份就方便多了。

另外,同年4月份Jenkins官方在新发布的Jenkins 2.0中开始全面推进pipeline,随着这次迁移,我们也一并实施了pipeline结合docker plugin的容器化改造。

pipeline化后,所有的build动作都通过代码仓库中的Jenkinsfile定义,完全不需要在jenkins的网页上进行配置,开发通过git push Jenkinsfile就能实现对CI流程的控制。

容器化后,CI的各种build环境也通过Dockerfile得以标准化,并且每次build的容器都是按需新建的,无需考虑cleanup操作。

2017 - mesos plugin & auto scaling

之前的docker plugin连接的docker cloud是一个单点ecs, 负责代码的编译,测试,打包,及部署操作,对于线上运行的各种微服务项目,还能应付,但如果用来跑编译路由器固件这种CPU密集型的任务,就力有未逮了。另一方面,预发布的测试集群由于流量很小,在绝大多数时候,各个节点的CPU都是空闲的。于是自然想到将预发布环境和CI环境进行扁平化:利用mesos plugin在预发布测试环境的mesos集群中集成jenkins framework, 用于运行容器化的jenkins slave。

固件编译虽然很耗CPU,但这只是一个耗时不到1小时的短任务,如果为了一天只做几次的build而多开几台包月ecs,会带来巨大的浪费。使用自动伸缩,当jenkins提示mesos资源不足时,利用API创建按量ecs加入mesos集群,等build完成后就将它释放掉,是一种高性价比的解法。

结论

系统化、标准化是降低成本,提升效率和质量的重要手段。2014年开始搭建CI系统时,build环境、部署环境、部署方式和配置方式都很零散,难以管理和维护。从2014-2017,先用容器标准化build环境和部署环境,并用pipeline标准化部署方式和配置方式,有效降低系统复杂度后,再用云计算资源降低电力供应和数据备份的风险和维护成本,最后用"扁平"与"伸缩"[1]降低云计算成本。


[1] 在云计算的五种基本实践方法 - "冗余, 漂移, 伸缩, 熔断, 扁平"中,"扁平"与"伸缩"是两种提高资源利用率,降低成本的方法,这方面的更多介绍请参考《云计算十字真言及其在小博无线的实践》一文 (https://yq.aliyun.com/articles/62686)

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
存储 SQL API
milvus insert api流程源码分析
milvus insert api流程源码分析
851 3
|
开发工具 git 索引
|
10月前
|
供应链 安全 数据可视化
2025年MES系统厂商排名揭晓:深度解析头部企业如何破解生产数智化难题
树根科技MES系统以“软件+咨询”模式深度融合精益生产与数智化技术,依托根云平台实现设备互联、数据集成与流程固化。其微服务架构支持灵活配置,覆盖计划、生产、质量、仓储等全场景,助力企业提升交付率、缩短周期、实现全流程追溯,为中大型离散制造企业提供高适配、可扩展的智能工厂解决方案。
428 2
|
人工智能 自然语言处理 搜索推荐
贝聿铭的 “数字续作”:蚂蚁百宝箱 × 苏州博物馆,用 AI 重构文化地标
苏州博物馆携手蚂蚁百宝箱推出AI助手“小苏苏”,集成展讯、导览、文创推荐等功能,打造“咨询—导览—消费”闭环,以智能服务提升参观体验,助力文博场馆数字化升级。
767 0
贝聿铭的 “数字续作”:蚂蚁百宝箱 × 苏州博物馆,用 AI 重构文化地标
|
前端开发 Java 微服务
2025 年全网超全 Java 从入门到精通学习路线指南
这是一份全面的Java学习路线图,涵盖从基础到进阶的知识体系。基础阶段包括环境搭建、语法学习与面向对象编程;进阶阶段深入数据结构、多线程、JVM原理及泛型集合;框架阶段掌握Spring、MyBatis等工具;数据库阶段学习SQL、MySQL及Redis;前端技术涉及HTML、CSS与Vue;分布式阶段探讨微服务架构、Docker与Kubernetes;最后通过企业级项目实战提升性能优化与代码重构能力。资源地址:[https://pan.quark.cn/s/14fcf913bae6](https://pan.quark.cn/s/14fcf913bae6)
1763 7
|
数据采集 BI 数据格式
【分享】打工人福音!AiPy 自动分析打卡记录,从此告别加班
每月统计考勤数据曾是行政人噩梦:手动核对数百人打卡记录、处理异常数据,月末加班成常态。但现在,AiPy让这一切迎刃而解!只需3分钟,即可高效完成考勤统计,准时下班不是梦。AiPy功能强大:一键锁定关键时间点,智能清洗数据,自动生成标准报表。告别重复劳动,提升工作效率,惊艳领导,快与同事分享,一起成为效率王者!
|
数据可视化 算法 数据挖掘
Python量化投资实践:基于蒙特卡洛模拟的投资组合风险建模与分析
蒙特卡洛模拟是一种利用重复随机抽样解决确定性问题的计算方法,广泛应用于金融领域的不确定性建模和风险评估。本文介绍如何使用Python和EODHD API获取历史交易数据,通过模拟生成未来价格路径,分析投资风险与收益,包括VaR和CVaR计算,以辅助投资者制定合理决策。
1422 15
|
存储 算法 中间件
每日 3000万订单的社区电商要如何分库分表
文章首先介绍了分库分表的基本概念,包括分库、分表及其组合形式,并详细解释了水平切分、垂直切分和混合切分的方式。接着分析了分库分表的原因,如解决性能瓶颈、微服务化需求等。文章还讨论了分库分表的常见问题,如调试难度、分布式事务和跨库查询等,并介绍了分库分表工具的客户端模式和代理模式。最后,通过一个社区电商的真实案例,详细展示了分库分表的具体落地过程,包括评估库表总数、选择分库分表字段等关键步骤。
866 5
|
Ubuntu Linux Docker
【ClickHouse】深入浅出系列之快速部署ClickHouse
【ClickHouse】深入浅出系列之快速部署ClickHouse
当用户需求不详细时,如何有效应对
当用户需求不详细时,如何有效应对
1405 0

热门文章

最新文章