以review 系统为核心的新一代持续集成

传统的持续集成(CI)系统被设计成作业的流水线。你可以有一个同行评审,然后开始构建作业,然后是单元测试作业,然后是集成测试作业,然后是性能测试作业,诸如此类。

每个作业都是由前一个作业的成功完成事件触发的,而第一个作业则是由版本控制系统中源代码文件的变更事件来触发的。当然,如果你的目标是多个二进制平台,或者如果你正在构建的是一组组件,以此来测试整个的应用程序,那么它还会更加的复杂。

那么如果有任务失败了会怎样?Jez Humble 和 David Farley 在持续交付中认为,你首先需要遵循这样的原则:"不要在失败的 build 上提交代码"。换句话说,不要由于新的提交导致问题更严重。如果你违反了这个原则,你就没法确认引起错误的真正原因。Humble 和 Farley 建议选择下面两种策略之一来处理 build 失败的情况:

"当 build 失败是,不要去做别的事情," 意思是团队中的所有人都要停下来去修复这个问题。

"时刻准备回滚到上一版本。" 回滚的策略可以避免打断整个团队的工作。

当然,也可以采用混合的策略:在可容忍的时间内尝试修复,超过时间则进行回滚。

还有一种方式可以稍微缓解问题,那就是使用集成分支,只有集成分支是绿色的(所有测试通过),才允许进行代码的合并。这种策略下集成分支还是有同样的问题,不过 master 分支可以保证总是可用的。

类似的方式适用于小团队,你可以让团队的所有成员都暂停代码的提交,不过即使是小团队,CI 处于红色状态也有可能会持续比较长的时间。对于这种方式的 CI 实践,你需要严格遵循完善的规定。不过你也可以尝试一种新的实施 CI 的方式。

新一代的 CI

目前的 CI 是以 CI 服务器为中心。CI 服务器负责发现改动并触发任务。

新一代的 CI 则是以代码 review 系统为核心,这样可以保证在改动合并到版本管理系统之前完成相应的操作。

是否加入团队的代码 review 的过程,这取决于你。我强烈建议通过代码 review 来提高代码的质量,但是这与 CI 系统本身是独立的。我们需要强调的是,构建和测试这些行为是由代码 review 系统的新提交来触发的。当所有测试都通过后,代码才会被合并到主干上。如此一来,主干的代码总是可以保证是测试通过的,开发人员也可以并行的进行代码提交。新的 CI 体系可以让你的自动化变得流畅,因为不再有问题会阻塞流程。

OpenStack 的工作流程

CI上的新的方法已经在 OpenStack 项目中得到大规模的实现,一次来管理所有不同的子项目的CI过程。为了使你对它的规模有一个概念,可以看到每天 OpenStack 都要处理 1000 个提交的补丁包,7500条提交的有关于Gerrit的评论和投票, 催生出16,000 个测试环境,还有250次变更的合并(源代码)。

为了实现下一代的CI系统,OpenStack项目使用下面这些组件:

  • Gerrit, 代码审查和git资源库管理器。
  • Zuul, git代码库控制系统。
  • Jenkins, 持续集成服务器。
  • Nodepool, 部署在OpenStack云上的智能的 Jenkins 衍生工具。

这些工具通过使用随机推断的合并策略来实现在同一个项目上的并行测试。如果同一时间在同一项目之上发生了多次评审,Zuul就能够以随机推断的方式将它们放到一起来对它们进行测试。例如,加入评审被命名为A、B和C,那么Zuul将会并行的对 A、A+B以及A+B+C进行测试。如果他们都成功了,那么就已经跟A经过了测试并进行了合并效果是一样的了,然后B在分支(A)的基础上经过了测试然后进行了合并,C在A+B的基础之上也同此理。 这样当你同一个项目有多个代码贡献者时,集成的过程会加速不少。

Zuul 还能管理跨多个项目的依赖,允许资源库间评审的合并。这在git中是个关键的东西,因为在git中你的组件存在于不同的git资源库中。

试一试

对于大的团队甚至是小的团队来说,你都可以通过配置前述的组件来使项目受益于这一工作流程。Puppet 模块就能用来轻松的配置这些服务。

另外一种方法就是使用我们自己对这些服务的集成,叫做软件工厂。你将会获得下面这些功能特性:

  • 对这些功能做了一个不错集成的一个 web 菜单。
  • 一个在所有这些服务间轻松进行单点登录的方案,还有在 LDAP、GitHub 或者登录面饭(cauth)上的外部认证方案。
  • 一个bug跟踪系统(Redmine).
  • 协作工具:
    • 用于共享输出或者代码提取的 Paste。
    • 用于协作编辑的 Etherpad。
  • 以一种简单的方式管理从之前版本的升级。

因为软件工厂是自托管的(我们使用软件工厂来开发软件工厂), 你可以在 softwarefactory-project.io 上对它进行了解。

如果你想要测试驱动的软件工厂,只要按 softwarefactory-project.io/docs/deploy.html 上的文档照做就行了。

你可以就使用这一新的方法进行 CI 的收获同我们保持交流。

本文作者:佚名

来源:51CTO

时间: 2024-11-10 00:20:15

以review 系统为核心的新一代持续集成的相关文章

超大型系统的持续集成与持续交付解决方案与阿里宙斯盾

作者简介:鲁小川,09年本科毕业于浙江大学软件学院,之后就一直就职于阿里巴巴B2B质量保障部,目前是云效持续集成与持续交付解决方案的负责人. 以下内容根据演讲嘉宾分享以及PPT整理而成. 今天分享的议题是<超大型系统的持续集成与持续交付解决方案及案例分析>,主要就是和大家聊聊阿里巴巴B2B技术部这几年来在持续集成与持续交付上实践经验,以及为什么要做宙斯盾系统平台产品来支撑持续交付.宙斯盾平台在阿里内部经过了5年多的积累沉淀,现在已经对外服务输出了,对外服务产品的名字叫做云效平台,后面还会介绍云

使用 Subversion、Hudson 和 Eclipse 构建持续集成系统

持续集成系统简介 持续集成系统是指持续地编译.测试.检查和部署源代码的系统. Martin Fowler 对 持续集成是这样定义的 : 持续集成是一种软件开发实践,团队开发成员经常集成它们的工作,通常每个成员每天可 能会发生多次集成.每次集成都通过自动化的构建(包括编译.发布.自动化测试)来验证,从而尽快地发现集成错误.这 个过程可以大大减少集成的问题,从而让团队能够更快的开发内聚的软件. 持续集成有以下几个特点和要求: 有统一的源代码库. 开发人员基于同一个源代码库进行开发是进行持续集成的一个

使用Subversion、Hudson和Eclipse构建持续集成系统的过程

持续集成系统是指持续地编译.测试.检查和部署源代码的系统. Martin Fowler 对持续集成是这样定义的 : 持续集成是一种软件开发实践,团队开发成员经常集成它们的工作,通常每个成员每天可能会发生多次集成.每次集成都通过自动化的构建(包括编译.发布.自动化测试)来验证,从而尽快地发现集成错误.这个过程可以大大减少集成的问题,从而让团队能够更快的开发内聚的软件. 持续集成有以下几个特点和要求: 有统一的源代码库. 开发人员基于同一个源代码库进行开发是进行持续集成的一个前提.为了让持续集成系统

直播|超大型系统的持续集成与持续交付的解决方案及案例分析

人人都在谈敏捷开发的时代,大型系统要保证产品质量,实现快速迭代却变得不易.那么大型系统如何实现持续集成持续交付,进行产品迭代发布呢? 9月7日晚上20:00阿里巴巴高级测试开发专家--鲁小川,将在阿里云•为大家现场直播,提供解决方案!与此同时,直播现场特别设置答疑环节,让观众与专家进行一次零距离的沟通交流! 直播详情 直播时间:2016-09-07 20:00:00 直播地址:http://yq.aliyun.com/webinar/play/69 (报名之后才能收看直播哦~) 直播内容 主题:

Windows 7系统细致核心图形架构

  如现在大家所想的那样,Windows7其实是Windows Vista的改进版.Windows 7在Windows Vista的基础上进行了大量的完善工作,也加入了不少新特性.Vista与其上一代XP相比,提供了非常大的改进,然而一方面这些改进过于巨大,用户乃至相应软件厂商(如,DirectX 10应用开发商)一时无法完全接受,另一方面,由于特性的不完全具备,Vista的表现没有想象之中的那么好.到了Windows 7,包括操作系统本身.软件厂商和用户都已经做好了准备,因此反响比Vista更

基于容器服务的持续集成与云端交付(五)- 探究持续交付系统的本质

换个角度看持续交付 在<基于容器服务的持续集成与云端交付>系列中,我们已经讨论了持续集成与持续交付给软件开发带来的变革,介绍了如何从零搭建一个持续交付系统以及在阿里云上面如何实现持续交付. 不过,在这篇文章中,我们会用一个不一样的角度来思考持续交付,到底持续交付给我们带来了什么,在容器的持续交付的场景中还缺少什么.回到本系列第一篇文章中的容器持续交付的流程图: 这张图中描述了一个基于容器的持续交付的流程,它定义了几个阶段,本地开发阶段.持续集成阶段.持续交付阶段等等,规定了在每个阶段中该做什么

基于容器服务的持续集成与云端交付(三)- 从零搭建持续交付系统

前言 在上一篇文章中讨论了容器服务提供的交付能力,在本文中我们将讨论如何从零搭建一个持续交付系统. 对于大多数公司而言,选择一个合适自己的持续交付系统是尤为重要的一件事情,不同的公司.不同的业务使用的场景也各不相同,因此要根据自己的业务场景与发展方向来选择合适的方案.根据不同的业务场景与交付方式,阿里云容器服务提供了三种不同的持续交付方案. 基于Jenkins的持续交付方案 基于Jenkins的持续集成和持续交付方案是所有方案中最灵活.能力最强的方式,但也是需要客户自主运维的方案.对于现有提供持

tomcat-mac系统的jenkins持续集成问题

问题描述 mac系统的jenkins持续集成问题 请问安装好tomcat和jenkins后,新建job 构建,生成的workspace不在jobs下,为什么呢,找不到原因,求大神们帮忙 解决方案 tomcat重新安装就好了

java-外围系统跟核心系统进行交互时需要用到哪些接口

问题描述 外围系统跟核心系统进行交互时需要用到哪些接口 外围系统跟核心系统进行交互时需要用到哪些接口啊,求大神告知. 解决方案 一般来说外围程序是不受信赖的,所以不能直接连你的系统,而是用过web service之类的api接口连接.比如说你可以参考支付宝的支付接口,或者微博微信的oa2.0接口. 解决方案二: 哪方面的?外围系统要干什么?核心系统是啥?说清楚一些才方便答哈