微课 | 云CI ZUUL应用设计方案系列(1) ZUUL 初识

点击上方“中兴开发者社区”,关注我们

每天读一篇一线开发者原创好文

微课 | 云CI ZUUL应用设计方案系列(1) ZUUL 初识

DevOps微课系列旨在帮助用户学习DevOps实践。


1.背景

随着云CI的推广,大量项目上线云CI,大部分项目对Verify CI 和 Merge CI都有急切的需求。Jenkins 2.0的Pipeline虽能实现Verify CI 和 Merge CI,但不是严格意义上的Verify CI 和 Merge CI,它不能解决并发多单依赖的问题,拉长了问题反馈时间。为解决该问题,源于OpenStack开源社区的基于ZUUL框架的 CI方案出现在我们的视线中,该方案为云CI解决并发多单依赖问题带来了曙光。


2.可行性分析

ZUUL是一个独立的工具,它的工作原理是基于触发源头变更,对相关变更影响进行分析,基于变更影响分析并发分配出多个任务进行并发测试,最后将最终结果反馈出来。
OpenStack的CI系统是基于Jenkins的,基于OpenStack开源项目的性质,项目大,全球各地的开发人员多,变更提交频繁,因此开发了ZUUL工具来解决并发多单依赖问题,确保所有的并发变更只有在事先被测试通过后才允许合入。
云CI也是基于Jenkins的,本质上与OpenStack的CI系统是相通的,因此将ZUUL移植到云CI上理论上具有可行性。


3.相关介绍

1) ZUUL简介

ZUUL是面向流水线的项目主干门禁与自动化系统。和Gerrit与Jenkins有接口,配置灵活,适合多种项目的自动化,可以并行执行一系列变更的测试,ZUUL可保证合并进入源代码库的变更都是事先通过测试的。

2) ZUUL的主要特点


① 源于业界先进的开源OpenStack CI

② 高并发:支持大并发git-review的测试

③ 冲突解决:较好的解决并发多单依赖

3) ZUUL组件构成

① ZUUL-SERVER: 后台调度程序,与Gerrit和Gearman通信,负责处理收到的事件,发起JOB,收集结果并上报

② ZUUL-MERGER:与Gerrit通信,为测试JOB准备Git仓库。这个额外需要有WEB服务器作为Git仓库,以便JOB测试时clone代码。

③ ZUUL-CLONER:创建JOB工作区的客户端脚本,用来clone ZUUL-MERGER准备好的临时代码仓库。

④ GEARMAND:可选的ZUUL-SERVER内置GEARMAN后台程序,主要进行任务分发

⑤ Jenkins Gearman Plugin: Jenkins与Gearman Server连接的插件

4) ZUUL关键流程

以如下并发提交A,B,C,D,E为例,按照提交顺序,后面提交的会依赖前面提交的变更:

微课 | 云CI ZUUL应用设计方案系列(1) ZUUL 初识

ZUUL会并行发起5个测试任务:

微课 | 云CI ZUUL应用设计方案系列(1) ZUUL 初识

Test A:

微课 | 云CI ZUUL应用设计方案系列(1) ZUUL 初识

Test E:

微课 | 云CI ZUUL应用设计方案系列(1) ZUUL 初识

假设Test A 和 Test B测试通过,Test C,D,E都失败,那么变更A,B可以合入主干分之,并从队列中剔除。

微课 | 云CI ZUUL应用设计方案系列(1) ZUUL 初识

由于C测试失败,A,B测试成功,说明C的失败肯定是自身引起的,而D,E的失败是由于变更C导致还是D,E本身导致还不可知,因此将C从队列中剔除,继续测试。          

微课 | 云CI ZUUL应用设计方案系列(1) ZUUL 初识

此时队列中只剩下D,E变更,然后继续最开始的流程,周而复始,直到队列为空。

微课 | 云CI ZUUL应用设计方案系列(1) ZUUL 初识

微课 | 云CI ZUUL应用设计方案系列(1) ZUUL 初识