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

简介:

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

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

Continuous Integration flowchart

那么如果有任务失败了会怎样?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

相关文章
|
6月前
|
存储 监控 数据挖掘
系统分析师:商业智能和业务流程管理的集成分析
系统分析师:商业智能和业务流程管理的集成分析
|
26天前
|
数据采集 测试技术 API
ERP系统的数据迁移与集成指南
ERP系统的数据迁移与集成指南
23 0
|
2月前
|
Web App开发 前端开发 JavaScript
如何快速与呼叫中心系统CTI/API/SDK接口集成
由于呼叫中心系统涉及通信、CTI、终端设备、中继线路等技术与概念,从事信息管理系统、ERP、CRM、工单系统等的研发人员一般不是非常熟悉这部分技术,当需要提供具备呼叫中心能力的解决方案时,往往要用较多的时间来研究这些相对复杂的技术,对接过程比较长,开发调试有一定的阻力,基于此,我们提出一种更加简便高效的集成方法,可以零代码集成呼叫中心平台,实现项目快速上线。
如何快速与呼叫中心系统CTI/API/SDK接口集成
|
2月前
|
监控 数据可视化 测试技术
集成阿里云 RPA 与现有系统
随着企业对自动化和数字化转型的需求不断增长,阿里云 RPA(机器人流程自动化)技术成为了提升业务效率和减少人工操作的重要工具。本文将介绍如何集成阿里云 RPA 与现有系统,以实现更高效的业务流程自动化。
|
4月前
|
Java BI Linux
java医院信息系统his源码,集成相关医保、农合接口,同医保或农合无缝融合
系统特点: 1、 基于一体化公共基础数据平台设计,给医务工作者提供了完整的工作平台。 2、 实现了核算、临床、决策、服务信息一体化,简化了系统软、硬件结构,降低了系统开发、实施和维护成本,提高了系统的运行效率。 3、 同时集成相关医保、农合接口,同医保或农合无缝融合。 4、B/S架构,采用JAVA编程,支持跨平台部署应用(Windows Linux),足够满足一级综合医院(专科二级及以下医院500床)的日常业务应用。能完全满足各地相关医保工程定点医疗机构统一标准社保接口设计规范要求。
|
4月前
|
移动开发 数据安全/隐私保护
钉钉可以集成企业内网部署的网盘系统实现账号单点登录吗?
最近接到客户的咨询,他们近期在公司局域网里部署了一套文档管理系统(一般叫私有网盘),领导希望平时通过手机钉钉就能访问到这套系统。客户就有些为难,钉钉是部署在公有云互联网环境的,而这套文档管理系统是部署在企业内网的,看上去应该打通不了,于是前来求助。
125 1
|
5月前
|
SQL 消息中间件 存储
TuGraph Analytics动态插件:快速集成大数据生态系统
插件机制为GeaFlow任务提供了外部数据源的集成能力扩展,GeaFlow支持从各类Connector中读写数据,GeaFlow将它们都识别为外部表,并将元数据存储在Catalog中。GeaFlow已有一些内置的插件,例如FileConnector,KafkaConnector,JDBCConnector,HiveConnector等。
|
6月前
|
数据采集 数据建模 API
系统分析师笔记-信息化与系统集成技术
系统分析师笔记-信息化与系统集成技术
|
7月前
|
存储 监控 前端开发
S/4HANA(本地部署或云版)跟 SAP 家族系统以及非SAP系统的集成,到底什么是推荐的方式?
S/4HANA(本地部署或云版)跟 SAP 家族系统以及非SAP系统的集成,到底什么是推荐的方式?
48 0
|
8月前
|
供应链 测试技术 应用服务中间件
软件测试案例 | 气象探测库存管理系统的集成测试计划
将经过单元测试的模块按照设计要求连接起来,组成规定的软件系统的过程被称为“集成”。集成测试也被称为组装测试、联合测试、子系统测试或部件测试等,其主要用于检查各个软件单元之间的接口是否正确。集成测试同时也是单元测试的逻辑扩展,即在单元测试基础之上将所有模块按照概要设计的要求组装成为子系统或系统,然后进行测试。但是,不同的集成策略会导致集成测试方法的选择不同。在实际工作中,时常有这样的情况发生: 每个模块都能单独工作,但是这些模块集成在一起后就不能正常工作。其主要原因是模块间相互调用时会引入许多新的问题: 数据经过接口可能丢失; 一个模块对另一个模块可能造成不应有的影响; 单个模块可以接受的误差在
123 0
软件测试案例 | 气象探测库存管理系统的集成测试计划

热门文章

最新文章