什么是持续集成?

持续集成CI,在一般软件开发中,每个人在完成项目工作后开始完成整合工作。整合一般需要数周或数月时间,整合过程是非常痛苦的。持续集成是一种在早期开发阶段,每天数次的合并代码到主干,持续的进行构建、测试和集成代码。

image.png

持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。

持续集成的目的,可以更高效率的快速迭代软件产品,同时还能保证高质量。它可以保障,我们把代码合并到主干之前,能够充分的自动化测试,单元测试,只要有一个单元测试未通过,则无法集成到主干。

举例,GitHub中开源的项目,都是由全球开发者一起开发完成的,这些开发人员遍布全球,相互都是通过网络沟通,通过制定规范,每天上百次提交代码,如果没有CI服务器来自动化测试他们几百人提交的代码,做一些基础性的检查,估计做这个工作的人得累吐血了,程序员最不喜欢重复劳动,都有极客精神,有些无法忍受这样的情况,发明了一些CI新的软件解决问题。CI服务器可以很好的帮助把集成代码做统一的单元测试,语法、编程规范检测,程序完整性等等前置条件。

code review时,代码已经可用,常规性的检测CI已经完成,并且会自动给开发人员反馈CI测试报告。review的人专注在代码实现逻辑检测,是否符合产品功能需求。

通过一个中心源代码仓库,大家共同协作,每次提交之后,自动触发持续集成平台,拉取最新的代码进行测试,让整个平台联动起来,通过每天持续的迭代测试,提高整体的交付产品周期。

好处有三个:

 (1)快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。

 (2)防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。

 (3) 缩短产品研发周期。每天迭代测试,统一目标,更快的发现问题,解决问题,提高整体效率。

一个完整的持续集成系统必须包括:

  • 一个自动构建过程,包括自动编译、分发、部署和测试等。
  • 一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库。
  • 一个持续集成服务器。

持续交付

image.png

持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的预生产环境中更多的测试。如果代码质量管理以及评审通过,具备随时替换线上版本的能力。

持续交付,可以看作是持续集成的下一步,不管你软件怎么更新,必须保证随时可交付能力。

预生产环境,代码通过预生产环境的测试和检验,更加能够保证产品的质量,如果出现问题,更快的反馈问题,可以更容易理解问题出现的位置,并在代码进入生产环境之前将其解决。

持续部署

持续部署则是在持续交付的基础上,把部署到生产环境的过程自动化。

image.png

通常需要具备持续部署,出现问题,紧急回滚上一个版本的能力。曾经实现这个目标通常需要使用软连接解决,而现在我们拥有先进的容器技术,可以保障快速版本回滚修复问题。

DevOps

高质量的测试和自动化发布系统(一个高度自动化可持续的流水线式的交付系统)

image.png

持续 (Continuous):不断的获取反馈,响应反馈。

集成 (Integration):编译、测试、打包;

部署 (Deployment):应用组件或基本设施的代码或配置变更在产品环境生效称为“部署”;

发布 (Release):具有业务影响的功能变化对最终用户可见称为“发布”。

交付 (Delivery):可以理解为Deployment到Release之间的阶段,更多的强调一种能力。开发有能力的持续部署,业务有能力随时发布。

为了高质量的软件交付,组织必须转向自动化流程,手动流程太容易出错,效率低下。对于执行CD和devops的团队来说,自动化变得越来越重要,大家只需要专注在code和review中,其它过程都尽可能的自动化。

代码库存越是积压,就越得不到生产检验,积压越多,代码间交叉感染的概率越大,下个release的复杂度和风险越高;代码库存越多,workflow的包袱越重,管理成本越大;

越早通过用户和DevOps建立可持续反馈机制,可以帮助软件产品更好的迭代和修复缺陷,建立完善的反馈机制能够更早的发现问题,让我们更多的时间找到完美的解决问题方案。

参考:

[1] https://www.mindtheproduct.com/2016/02/what-the-hell-are-ci-cd-and-devops-a-cheatsheet-for-the-rest-of-us/

欢迎关注微信公众号[whoami],阅读更多内容。


image.png

原创文章,转载请注明: 转载自Itweet的博客
本博客的文章集合: http://www.itweet.cn/blog/archive/

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在前一篇文章持续集成入门篇中我大概介绍了下持续集成的概念及工具(抱歉,在前一篇文章中我查的资料不够与时俱进,工具介...
    craneyuan阅读 1,781评论 0 7
  • <<互联网敏捷DevOps和自动化之5.持续集成>>持续集成的价值是什么?对于开发和测试人员又意味着什么呢?1.1...
    燕京博士阅读 2,810评论 0 5
  • 前言 DevOps方案实施在互联网行业中已经相对成熟了,而在游戏行业中还处在起步的初级阶段(据个人了解的身边游戏公...
    云时代构架杨彪阅读 2,600评论 0 8
  • 也许你不想听我说谢谢,但却是我唯一能讲的心意。与你相遇,好幸运。 今天才在网上看完我的少女时代这部电影,这让我想起...
    二念阅读 1,987评论 6 7
  • 柳哲 陈漱渝先生,我素所敬仰,有过数面之交,留下深刻印象。他是一位儒者,为人坦荡,平易近人,治学严谨,有君子之风!...
    柳志儒阅读 328评论 0 0