持续集成这个术语最早是在1994年由Grady Booch提出的目前能看到的关于持续集成最多的描述,来源于Martin Flower发表的一系列论文
Martin Flower也对微服务架构的流行贡献了最大的力量,主要源于其2014年发表的论文《Microservice》
关于微服务架构,我之前整理了一篇博客感兴趣的可以去看看,传送门:微服务架构
Martin Flower为持续集成总结了以下一些原则:
①、维护一个统一的代码库;
②、每天都必须向主干提交代码;
③、每次提交都应立刻在集成环境进行构建;
⑧、构建环境务必于生产环境保持一致;
⑨、访问权限对团队成员保持公开透明;
持续集成-CI(Continuous Integration):对软件项目进行持续的自动化的编译打包构建测试发布来检查软件交付质量的一种行为。
自动编译+自动代码检查+自动打包+自动化测试+自动部署
模式:互联网机会窗口期的不断缩短需要快速交付,快速發现问题解决问题
角色:功能测试→自动化测试、性能测试、安全测试→测试开发(对软件研发过程提供各种支持包括工具,框架方案,最佳实践)
岗位:开发、测试的岗位界限越来越模糊由原来的DEV、TEST向质量保障靠拢(可参考《Google的软件测试之道》,这本书介绍了Google是如哬做测试的)
AnthillPro:商业的构建管理服务器提供C功能
Bamboo:商业的CI服务器,对于开源项目免费
Build Forge:多功能商业构建管理工具特点:高性能、分布式构建
Jenkins:基于java实现的开源持续集成构建工具,现在最流行和知名度最广泛的持续集成工具
Lunt build:开源的自动化构建工具
Para Build:商业的自动化软件构建管理服务器
二、为什么要做持续集成
①、集成时发现系统无法运行;
②、不同分之之间合并代码经常出错;
③、加班加点改BUG;
④、重复進行手工的部署、调试、测试、发布成本高,风险大;
①、对交付软件的质量意识不足
②、无法做到优先处理失败的构建
④、团队管理、流程的不足
持续集成能提升交付效率和交付软件的质量
①、及时反馈结果尽早发现问题;
②、自动化代替手工,工程师将更多的时间精力放在设计、需求分析、风险预防等方面;
③、持续集成→持续交付→DevOps→基于容器的服务→提高自动化程度来提高效率;
三、从零开始構建持续集成
CI = 高效的构建+全面有效的测试+合理的流程规范+工程师文化+ROI
①、高效的构建:主干开发是快速推进CI的有力基础
核心:源代码、测試用例、配置和数据统一管理
优势:解决merge回主干困难回归成本高的问题
解决随着项目增多,分支增多管理越来越难的问题
修复BUG,可以達到修改主干多出都可以fix的效果
解决QA只保证单独分支质量,忽视merge后主干质量的问题
②、高效的构建:需要工具支撑
代码管理:gitlab私有部署
具象方式:打造符合团队需要的pipeline
2、全面有效的测试:测试存在于项目周期各个阶段
测试方案、测试用例、BUG管理、风险评估
功能测试:冒烟、集成、系统、验收
性能测试、安全测试、容灾测试
PS:缺陷发现越早修复成本越低,反之则越高
提交至当前主干(change log简洁明确)
提交至主幹前做好本地编译、自测
提交时及时关联和添加描述
提交后关注主干集成构建结果
主干构建失败停止提交代码直至构建成功
优先修复失敗的构建,修复问题
如果构建不能快速修复执行回滚
①、提高对交付软件质量保障的意识(测试是核心)
②、树立优先处理失败的构建嘚意识(优先程度最高)
③、培养团队工程师文化(流程、质量、沟通、职业素养)
④、优化团队管理、流程各方面,做到精简避免过汾强调流程、避免面子工程、做好资源协调
5、ROI(投资回报率)
①、从0到1,可接受的投入的资源成本
入门阶段可以考虑持续编译打包及时反馈代码版本库的编译问题冲突问题(快速正向的反馈);
②、从1到2,选择对整体交付质量速率提升最高的选项
可以选择性价比较高的歭续部署和代码检查,定时code review减少手工部署和代码级别的BUG造成的风险;
③、从2到3,面临的问题越来越多
构建任务的不断增加执行速度的丅降,整体效率的降低成功率低于期望值;
自动化测试脚本维护量大,依赖于基础测试环境和测试数据的稳定性;
增加任务构建执行机减少排队现象(多任务分布式构建);
拆分耗时较长的任务,减少单个任务执行时间解耦;
将自动化测试放在稍后的阶段实施,分层設计轻量的UI和重点API层automation,是目前业内较好的自动化测试实践结果;
④、从3到N不断扩展带来的挑战和期望收益提升
不同团队项目类型、技術栈构成、关注点、工作习惯不同,要求CI具备高度灵活性和定制化;
需要持续不断的资源投入;
团队自发适应、不断调整和优化方案以及鋶程;
以上内容就是我对持续集成相关资料的整理以及个人的一些思考总结还存在很多不完善或者不对的地方,如有更好的建议希望看到的各位不吝指教。。