浅谈持续集成

简介: 角色:功能测试→自动化测试、性能测试、安全测试→测试开发(对软件研发过程提供各种支持,包括工具,框架,方案,最佳实践)

最近在看软件质量保障相关的一些资料,持续集成占据了其中很大一部分篇幅。这篇文章,主要内容是对持续集成相关知识的整理归纳,以及个人对持续集成的一些思索总结,介绍持续集成的起源、发展以及如何实践。


相关阅读推荐:


持续集成:软件质量改建和风险降低之道

《持续交付:发布可靠软件的系统方法》

 

一、起源与发展


1、起源


持续集成这个术语最早是在1994年由Grady Booch提出的,目前能看到的关于持续集成最多的描述,来源于Martin Flower发表的一系列论文。Martin Flower也对微服务架构的流行贡献了最大的力量,主要源于其2014年发表的论文《Microservice》关于微服务架构,我之前整理了一篇文章,感兴趣的可以去看看,传送门https://www.cnblogs.com/imyalost/p/6792724.html


Martin Flower为持续集成总结了以下一些原则:


①、维护一个统一的代码库;

②、每天都必须向主干提交代码;

③、每次提交都应立刻在集成环境进行构建;

④、自动化构建;

⑤、自动化测试;

⑥、自动化部署;

⑦、快速、持续构建;

⑧、构建环境务必于生产环境保持一致;

⑨、访问权限对团队成员保持公开透明;


2、定义


持续集成-CI(Continuous Integration):对软件项目进行持续的自动化的编译打包构建测试发布,来检查软件交付质量的一种行为。


3、组成


自动编译+自动代码检查+自动打包+自动化测试+自动部署


4、演进


模式:互联网机会窗口期的不断缩短,需要快速交付,快速发现问题解决问题


角色:功能测试→自动化测试、性能测试、安全测试→测试开发(对软件研发过程提供各种支持,包括工具,框架,方案,最佳实践)


岗位:开发、测试的岗位界限越来越模糊,由原来的DEV、TEST向质量保障靠拢(可参考《Google的软件测试之道》,这本书介绍了Google是如何做测试的)


5、工具


AnthillPro:商业的构建管理服务器,提供C功能

Bamboo:商业的CI服务器,对于开源项目免费

Build Forge:多功能商业构建管理工具,特点:高性能、分布式构建

Cruise Control:基于java实现的持续集成构建工具

CruiseControl.NET:基于C#实现的持续集成构建工具

Jenkins:基于java实现的开源持续集成构建工具,现在最流行和知名度最广泛的持续集成工具

Lunt build:开源的自动化构建工具

Para Build:商业的自动化软件构建管理服务器

 

二、为什么要做持续集成


1、项目中常见的问题


①、集成时发现系统无法运行;

②、不同分之之间合并代码经常出错;

③、加班加点改BUG;

④、重复进行手工的部署、调试、测试、发布,成本高,风险大;

⑤、其他。。。。。。


2、团队文化问题


①、对交付软件的质量意识不足

②、无法做到优先处理失败的构建

③、工程师文化不足

④、团队管理、流程的不足


3、持续集成的优点


持续集成能提升交付效率和交付软件的质量


①、及时反馈结果,尽早发现问题;

②、自动化代替手工,工程师将更多的时间精力放在设计、需求分析、风险预防等方面;

③、持续集成→持续交付→DevOps→基于容器的服务→提高自动化程度来提高效率;

 

三、从零开始构建持续集成


CI = 高效的构建+全面有效的测试+合理的流程规范+工程师文化+ROI


1、高效的构建


①、高效的构建:主干开发是快速推进CI的有力基础


核心:源代码、测试用例、配置和数据统一管理

优势:解决merge回主干困难,回归成本高的问题

解决随着项目增多,分支增多,管理越来越难的问题

修复BUG,可以达到修改主干,多出都可以fix的效果

解决QA只保证单独分支质量,忽视merge后主干质量的问题


②、高效的构建:需要工具支撑


版本控制:git&SVN

代码管理:gitlab私有部署

基础环境:虚拟机、docker、kubernetes

自动构建:jenkins

反馈机制:邮件&短信&微信&钉钉

具象方式:打造符合团队需要的pipeline


2、全面有效的测试:测试存在于项目周期各个阶段


①、需求与设计:PM/DEV/QA


需求评审

需求变更

设计评审


②、开发与测试:DEV/QA/PM


code review、单元测试

测试方案、测试用例、BUG管理、风险评估

功能测试:冒烟、集成、系统、验收

性能测试、安全测试、容灾测试

线上验证、探索性测试


③、上线与线上:OP/QA/DEV/PM


线上验证

业务监控

用户反馈

产品评测


PS:缺陷发现越早,修复成本越低,反之则越高


3、合理的流程规范


①、代码提交规范


本地开发

本地编译(自测,check out)

提交至当前主干(change log简洁明确)

主干编译(测试,check out)


②、注意事项


提交至主干前做好本地编译、自测

提交前解决代码冲突

提交时及时关联和添加描述

提交后关注代码扫码结果

提交后关注主干集成构建结果

构建没问题后及时合并


③、遵循原则


主干构建失败停止提交代码,直至构建成功

优先修复失败的构建,修复问题

如果构建不能快速修复,执行回滚


4、工程师文化


①、提高对交付软件质量保障的意识(测试是核心)

②、树立优先处理失败的构建的意识(优先程度最高)

③、培养团队工程师文化(流程、质量、沟通、职业素养)

④、优化团队管理、流程各方面,做到精简,避免过分强调流程、避免面子工程、做好资源协调


5、ROI(投资回报率


①、从0到1,可接受的投入的资源成本


入门阶段可以考虑持续编译打包,及时反馈代码版本库的编译问题冲突问题(快速正向的反馈);


②、从1到2,选择对整体交付质量,速率提升最高的选项


可以选择性价比较高的持续部署和代码检查,定时code review,减少手工部署和代码级别的BUG造成的风险;


③、从2到3,面临的问题越来越多


挑战:


构建任务的不断增加,执行速度的下降,整体效率的降低,成功率低于期望值;

自动化测试脚本维护量大,依赖于基础测试环境和测试数据的稳定性;


解决方案:


增加任务构建执行机,减少排队现象(多任务分布式构建);


拆分耗时较长的任务,减少单个任务执行时间,解耦;


将自动化测试放在稍后的阶段实施,分层设计,轻量的UI和重点API层automation,是目前业内较好的自动化测试实践结果;


④、从3到N,不断扩展带来的挑战和期望收益提升


不同团队项目类型、技术栈构成、关注点、工作习惯不同,要求CI具备高度灵活性和定制化;


需要持续不断的资源投入;


团队自发适应、不断调整和优化方案以及流程;

 

以上内容就是我对持续集成相关资料的整理以及个人的一些思考总结,还存在很多不完善或者不对的地方,如有更好的建议,希望看到的各位不吝指教。。。

相关文章
|
11天前
|
Devops jenkins 测试技术
C# 一分钟浅谈:自动化部署与持续集成
【10月更文挑战第21天】本文介绍了自动化部署和持续集成(CI)在C#项目中的应用,涵盖基础概念、常用工具(如Jenkins、GitHub Actions、Azure DevOps、GitLab CI/CD)、常见问题及解决方案,以及实践案例和代码示例。通过合理配置CI/CD工具,可以显著提高开发效率和代码质量。
25 1
|
3天前
|
运维 Devops jenkins
DevOps实践之持续集成与持续交付
【10月更文挑战第32天】在软件开发的快节奏世界中,DevOps已经成为提升效率和质量的关键策略。通过将开发(Development)和运维(Operations)紧密结合,DevOps促进了更快速的软件发布和更高的可靠性。本文将深入探讨DevOps的核心组成部分——持续集成(CI)和持续交付(CD),并展示如何通过实际代码示例实现它们,以帮助团队构建更加高效和稳定的软件发布流程。
|
1月前
|
机器人 jenkins 测试技术
自动化与持续集成
自动化与持续集成
|
3月前
|
监控 测试技术 持续交付
持续集成与持续交付的最佳实践
【8月更文挑战第15天】持续集成和持续交付是现代软件开发中的重要实践,它们通过自动化和频繁地集成代码、构建、测试和部署,帮助团队更快地交付高质量的软件。通过遵循最佳实践,团队可以优化其持续集成和持续交付的流程,提高开发效率和软件质量。希望本文的分享能够为开发团队提供有益的参考和指导。
|
3月前
|
测试技术 持续交付 数据库
持续集成
持续集成
31 1
|
3月前
|
敏捷开发 运维 监控
持续交付 2.0
持续交付 2.0
40 0
|
6月前
|
存储 jenkins 测试技术
现代软件开发中的持续集成与持续交付
传统的软件开发模式已经无法满足当今快节奏的市场需求。本文将探讨现代软件开发中的持续集成(CI)与持续交付(CD)的重要性,并介绍了一些实践方法和工具,帮助开发团队实现高效的软件交付流程。
|
6月前
|
敏捷开发 运维 Devops
深入理解软件测试中的持续集成与持续交付
【2月更文挑战第16天】 在高速迭代的软件发展周期中,持续集成(CI)与持续交付(CD)已成为确保产品质量和加快市场投入的关键实践。本文将探讨CI/CD在软件测试中的应用,阐述如何通过自动化测试、版本控制以及快速反馈循环来优化软件开发流程。我们将分析CI/CD对提高测试效率、降低风险以及促进团队协作的积极影响,并讨论实施过程中面临的挑战及应对策略。
|
前端开发 测试技术 持续交付
前端可持续集成与持续交付
前端可持续集成与持续交付
188 0
|
jenkins 测试技术 持续交付
你真的懂持续集成、持续交付、持续部署吗?!
你真的懂持续集成、持续交付、持续部署吗?!
348 0
你真的懂持续集成、持续交付、持续部署吗?!