CI/CD技术分享:OpenStack Zuul介绍

编者按:据统计,在上周结束的OpenStack温哥华峰会中,关于CI/CD持续集成和交付的议题超过40个,CI/CD成为了整场峰会最热门的话题之一。而Zuul作为CI/CD模块中耀眼的明星,被大家所熟知,在本次峰会上更是引起了业界高度关注。在这里小编将简单介绍下Zuul,包括Zuul 的CI简单流程图、组件及架构等。


什么是Zuul 

随着OpenStack持续集成的推广,基于OpenStack开源项目的性质,项目大,全球各地的开发人员多,变更提交频繁。Jenkins不能解决并发多、单依赖的问题,拉长了问题反馈时间。为解决该问题,源于OpenStack开源社区的基于ZUUL框架的 CI方案出现在我们的视线中。


CI简单流程图


Zuul组件及工作流程

为了更好的理解什么是Zuul和Zuul到底是怎么工作的,需要介绍一下Zuul有哪些组件。



Zuul整体架构


Zuul-server

Zuul-server是Zuul的主要的服务,zuul-server是作为zuul的scheduler,zuul-server从gerrit接收消息,一旦消息被接收到,zuul-server就建立工作流程,并把处理结果返回给gerrit Zuul-server跟gerrit组件交流是通过执行“gerrit stream-events”,然后等待gerrit返回的信息,另外,zuul-server也与Gearman进行通讯。

Gearman

Jenkins的设计初衷并不用于并行执行,它设计中某些点使用到了全局锁,因此在Jenkins的slave节点增加到一定数量后(大约100台),Jenkins的master节点就会出现问题而成为瓶颈。同时master节点是单点部署,无法完成HA等处理。为了扩展Jenkins而引入了Gearman。


简单来说,Gearman是一个用来扩展Jenkins的一种协议,而且Gearman一开始并不是专门为Zuul开发的,但是Gearman很好的符合了Zuul的需求,因此OpenStack采用Gearman来扩展Zuul对Jenkins的调度。 在配置的时候可以选择单独创建Gearman-server或者是使用Zuul来部署Gearman,具体在/etc/zuul/zuul.conf里面进行配置:

1 [gearman_server]

2 listen_address = 127.0.0.1

3 log_config = /etc/zuul/gearman-logging.conf

4 start = true

5


把start改成true,zuul服务就会启动并管理Gearman进程。

Zuul-merger

这里不要被这个组件的名字所误导了,这个组件并不是当代码全部通过测试后用来merge到主干的。当开发者提交一个change后,zuul-merger把这个change merge到一个本地forked repository中 ,这样就可以进行下一步的测试了。


可以把zuul-merger单独部署在一台服务器上也可以进行高可用部署,即部署在多台服务器上组成zuul-merger的集群。


在zuul的配置文件 /etc/zuul/zuul.conf下可以对zuul-merger进行配置,在 [merger] section下面:

1 [merger]

2 git_dir = /var/lib/zuul/git

3 log_config = /etc/zuul/merger-logging.conf

4 pidfile = /var/run/zuul-merger/zuul-merger.pid

5 zuul_url = 127.0.0.1

6


  • git_dir是zuul对Git repository的一个copy

  • Log_config是配置zuul-merger的log目录

  • zuul_url是zuul server的url,这个url可能有多个(zuul集群的情况下)

Zuul-cloner

Zuul-cloner不像其他组件,它没有Damon,只有一个client,用来创建job的workspace

Zuul Workflow

下图解释了当一个patch提交给gerrit的时候zuul的workflow是怎么样的:



Gerrit

用户的patch是提交给Gerrit的,也可以是一个新的commit,一旦这个patch被提交上来,Gerrit就会publish一个event,通知其他服务来处理这个event,如Zuul、Jenkins等。

Zuul Server

Zuul-server根据zuul.conf的配置来启动相应的关联进程,Zuul server会先起一个进程叫GerritWatcher,用来listen从Gerrit那边传过来的event(步骤3),在注册好所有的连接后,zuul-server会起一个Gearman,zuul-server同时会启动Gearman和Scheduler。


当一个Gerrit的event被publish后,GerritWatcher就会通知scheduler,scheduler先会去检查这个event是否合法(根据layout.yaml里面定义的规则),如果通过,便会触发一个trigger event(步骤4)。


Scheduler接着处理这个event,并把这个event添加到一个相关的pipeline里面(步骤5,也是根据layout.yaml里面定义的规则),接下去就是pipeline来处理这个event了,scheduler也会去检查这个event是否依赖于其他的event。

Zuul Merger

当scheduler触发完成trigger event后,把整个代码克隆下来,并把更改的代码并入主干的工作是由zuul-merger来完成的。在步骤6中,merger会从gearman那边获得一个“merge job”的信息,里面包括项目的名称,分支信息,change number和ref等信息。第一步merger需要确认这个commit是不是重复的,如果是,那么就返回已经发生的commit,如果不是,那么继续下一步工作。


HEAD ref重置完成后,如果ref指向了一个不可用的分支,那么zuul就会自动选择第一个可用的分支,然后merger会通过“git fetch”来update repo,再checkout。


接下来merger尝试merge更改到repo上,如果merge成功,那么就会在zuul-server中创建一个新的reference到repo中,最后,merger会返回一个动作完成的信息。

Gearman & Jenknis

现在repo已经准备完成,在上面merger的工作完成之后,现在需要测试这个代码的更改。这步操作其实是scheduler来做的,但是需要配合Gearman来执行。Scheduler发送给Gearman,scheduler也会发送一些变量给Gearman,一般是 ‘ZUUL_’ 开头的。


Gearman接着把数据发送给Jenkins,Jenkins可能是一个集群,Jenkins在测试完成后会把结果返回给zuul,zuul再去通知gerrit是否去merge这个更改。

是否必须使用Jenkins

OpenStack社区考虑过不再使用Jenkins,只使用Zuul来代替,但是如果你的CI系统跟Jenkins强绑定的话,系统中使用了很多Jenkins的plugin,那么再去转换到non-Jenkins的环境中会有比较大的困难。当然可以慢慢利用Zuul来替换Jenkins,但是如果一定要使用Jenkins的话,那么就需要“Jenkins Gearman”这个plugin来提供支持。

Pipelines

Pipelines是Zuul重要的组成部分,每一个gerrit的change都会由一个或者多个Pipelines来进行处理。

Upsteam

非Openstack核心团队的人员可以在评审代码后作出+1(好)、0(无评价)、-1(不建议合并)的评价。核心团队的成员可以给出非核心成员可给出的所有评价,此外还可以给出+2(好,approved)、-2评价(不要提交)。


标签属性中另外一列为“Verified”。只有Gerrit的非交互用户(non-interactive users)如Jenkins,才能在此属性上添加Verified标签。Verified一列可设置的值为+1(check pipeline测试通过)、-1(check pipeline测试未通过)、+2(gate pipeline测试通过)、-2(gate pipeline测试未通过)。此外,第三方搭建的外部测试平台也属于非交互用户,但是只能设置+1、-1。


Pipeline也有很多种:


  • periodic – 周期性工作的pipeline,比如用于非工作时间做常规的测试

  • expermental – 如果你有一个新项目,但是不知道它是怎么工作的,那么可以用于这个expermental pipeline

  • pre-release – 触发的job是归于一个新的pre-release tags

  • release – 触发的job是归于一个release tags

定制化Pipelines

可以通过配置Zuul来定制化pipelines,可以通过更改zuul layout配置文件,下面是一个配置例子:

1 - name: test

2 manager: IndependentPipelineManager

3 source: gerrit_internal

4 trigger:

5 my_gerrit:

6   - event: patchset-created

7   success:

8 my_gerrit:

9 verified: 1

10  failure:

11 my_gerrit

12 verified: -1

13


可以自定义一个pipeline,取名为test,如果pipeline运行成功,那么返回给gerrit +1,如果失败,那么返回给gerrit -1。上面的配置文件中还有

1 manager: IndependentPipelineManager

2


这个是用来决定pipeline具体是如何工作的。

IndependentPipelineManager

IndependentPipelineManager是当pipeline在处理信息是不需要关心信息处理的顺序的时候使用,在一些patch提交时,在其他test正在运行的时候,也不会对这个patch提交产生影响,当前提交的patch相对独立,就可以使用IndependentPipelineManager。

DependentPipelineManager

DependentPipelineManager则是当pipeline在处理信息是不需要关心信息处理的顺序的时候使用,如果当你同时提交了多个patch,当一个patch test failed的时候,那么同时提交的相关联的patch都需要再次test一次。


Zuul同时还可以很好的处理具有复杂依赖关系的多个patch。它能监控正在执行的任务,并可提前结束掉因依赖的patch测试失败而必定失败的测试任务。


参考文献:

http://stackeye.com/2014/06/openstack-ci/

https://docs.openstack.org/infra/manual/zuulv3.html


关于九州云99Cloud
九州云(99Cloud.Inc)成立于2012年,是中国第一家从事OpenStack和相关开源服务的专业公司。公司成立六年,秉承“开源 · 赋能变革”的理念,已经从单一的OpenStack产品提供商,发展成为涵盖云核心、云运营、云运维和云安全等多个领域的开源软件和服务提供商。九州云已支持了国家电网、中国人民银行、中国银联、中国移动、中国电信、中国联通、中国资源卫星、中航信(航旅纵横)、eBay、国际陆港集团、中国人寿、万达信息、东风汽车、诺基亚等重量级客户。在2018年最新的Queen发行版排名中,九州云在核心模块贡献跃居全球第四,中国第二,其中在容器部署Kolla项目、NFV编排Tacker项目等重量级项目上贡献全球第一。



相关推荐

恭喜! 中移动智家中心入选2020年度ICT行业龙虎榜

1月8日,由信通传媒•通信世界全媒体举办的“2020年度ICT龙虎榜颁奖盛典”在北京顺利举行。会上,中移动智家中心提交参评的“中国移动智慧家庭运营中心视频安防混合云解决方案”实力登榜,被评为“2020年度ICT行业优秀解决方案”。时值岁末年终,作为行业权威媒体,通信世界全媒体进行了2020年盘点,总结了一年ICT行业在技术、市场和产品等各方面取得的成绩,并组织开展了“2020年度ICT产业龙虎榜暨优秀解决方案”评选。本次评选通过编辑推荐、专家评审等流程,历时一个多月时间,最终梳理并评选出在ICT

OpenInfra的博客 847

重磅!九州云获颁“2020年度运营商最佳合作伙伴”奖

1月8日,由信通传媒•通信世界全媒体举办的“2020年度ICT龙虎榜颁奖盛典”在北京顺利举行。会上,“2020年度ICT产业龙虎榜暨优秀解决方案”榜单正式揭晓,九州云获颁“2020年度运营商最佳合作伙伴”奖。通信世界全媒体是由工信部主管的行业权威媒体,是ICT产业的见证者、亲历者和推动者。为了更好的推动ICT产业技术进步,促进行业健康有序发展,鼓励企业创新进步,每年年终通信世界全媒体都会推出重磅盘点,总结一年行业在技术、市场、产品等各方面取得的成绩,并发布“ICT产业龙虎榜”,评选行业优秀解决方

OpenInfra的博客 1188

杭州轨交监管平台边缘云获奖 树立行业新标杆

2020年12月30日,由中国电子技术标准化研究院主办的“第十届中国云计算标准和应用大会”在北京顺利召开。大会期间,优秀案例评选结果正式公布,华东勘测设计研究院的“杭州轨道交通监管平台边缘云”案例实力荣获 “2020年云计算最佳实践奖”。在中国云计算标准和应用大会创办十周年之际,中国开源云联盟组织发起“聚焦数字基建,赋能实体经济”全新奖项评选。该评选旨在总结中国开源云计算领域十年来的发展经验,树立行业标杆典范,推动和落实云计算相关政策,引领新一轮技术创新热潮,为中国企业的数字化转型助力。此次

OpenInfra的博客 705

厉害了!九州云边缘计算管理平台获国家权威认证

2020年12月29日,由中国电子技术标准化研究院主办的“第十届中国云计算标准和应用大会”在北京顺利召开。大会期间,国家权威的云基准测评名单正式对外公布,九州云边缘计算管理平台V1.0通过测评,并在现场获颁证书。中国电子技术标准化研究院作为全国信标委云计算标准工作组以及中国开源云联盟的秘书处归口单位,一直在积极开展云计算国家标准、行业标准、开源团体标准的研制和落地应用工作,标准化成果丰硕。“云基准测评”即是依托中国电子技术标准化研究院的云计算基准库,建立起来的一套覆盖云计算解决方案、云.

OpenInfra的博客 1360

九州未来,2025混合云提供商TOP30

九州未来入选2025混合云提供商TOP30榜单。

OpenInfra的博客 375

九州未来入选信通院“开源大模型+”创新应用典型案例

九州未来Animbus融智一体机入选信通院“开源大模型+”创新应用典型案例。

OpenInfra的博客 339

九州未来亮相联通合作伙伴大会,深化合作共拓融合新生态

2025中国联通合作伙伴大会在上海举行,九州未来作为中国联通长期紧密的产业链合作伙伴参展,重点展示自主研发的AI-Studio大模型推训平台。该平台提供从开发训练到推理部署的全流程AI支持,具备可视化建模、高性能推理、知识库管理等核心功能,加速AI技术在产业中的落地应用。

OpenInfra的博客 506

九州未来邀您共赴2025中国联通合作伙伴大会!

边缘筑基·AI赋能·智联未来,九州未来邀您共赴2025中国联通合作伙伴大会。

OpenInfra的博客 347

共绘智算赋能产业新图景,九州未来出席2025南京软件大会

九州未来受邀出席2025南京软件大会并发表《智算中心赋能新质生产力》主题演讲,分享九州未来在利用智算技术驱动产业升级方面的前沿实践与创新思考。

OpenInfra的博客 329

九州未来亮相第二十届“开源中国开源世界”大会,分享AI边缘计算创新方案

九州未来出席第二十届“开源中国开源世界”大会,分享低轨网络MEC边缘云与AI融合的无单点失效解决方案。

OpenInfra的博客 424

九州未来十三载:开源赋能 智启未来

2012-2025丨让算力更智能,让未来更可见!

OpenInfra的博客 683

九州未来入选2025全国企业“人工智能+”行动创新案例TOP100

九州未来算力基础设施解决方案入选2025全国企业“人工智能+”行动创新案例榜单。

OpenInfra的博客 493

九州未来再度入选“中国边缘计算企业20强”,云边融合驱动智能创新

九州未来再度入选“中国边缘计算企业20强”。

OpenInfra的博客 437

九州未来荣获2024年度吴兴区服务业十佳企业

九州未来荣获2024年度吴兴区服务业十佳企业。

OpenInfra的博客 381

九州未来DeepSeek一体机,H20及L40S加持高效部署,安全无忧!

九州未来DeepSeek一体机,H20及L40S加持高效部署,安全无忧!

OpenInfra的博客 552

九州未来加入全球计算联盟,共筑新型计算产业发展新征程

九州未来正式加入全球计算联盟(GCC)。

OpenInfra的博客 377

九州未来再度入选新一代分布式云/算力50强

九州未来再度入选新一代分布式云/算力50强。

OpenInfra的博客 759

助力数字中国建设,九州未来收到中国信通院感谢信

近日,九州未来收到了来自中国信息通信研究院的感谢信,高度评价并诚挚感谢九州未来在中国信通院牵头的“铸基计划-高质量数字化转型推进行动”中的积极参与和卓越贡献。

OpenInfra的博客 348

九州未来荣登私有云TOP30榜单,赋能企业数字化新未来

九州未来入选《2024私有云企业TOP30》榜单。

OpenInfra的博客 554

一图读懂丨2024年九州未来智算云盘点

2024年九州未来智算云盘点

OpenInfra的博客 247

九州未来智慧物流建设项目入选《2024全国企业数字中国建设优秀应用案例》

九州未来智慧物流建设项目入选《2024全国企业数字中国建设优秀应用案例》。

OpenInfra的博客 318

九州未来亮相全球边缘计算大会,加速AI技术融合

九州未来亮相全球边缘计算大会,加速AI技术融合。

OpenInfra的博客 326

九州未来亮相2024首都工程师主题沙龙,共筑智慧交通新蓝图

九州未来亮相2024首都工程师主题沙龙,共筑智慧交通新蓝图。

OpenInfra的博客 355

共筑智能网联新里程,九州未来应邀出席“5G+算网”车路云一体化联合创新应用基地揭牌仪式

九州未来应邀出席“5G+算网”车路云一体化联合创新应用基地揭牌仪式,共筑智能网联新里程。

OpenInfra的博客 509

开启信息科技跨学科融合新路径,OpenHydra亮相全国中小学人工智能与创客教育大会

开启信息科技跨学科融合新路径,OpenHydra亮相全国中小学人工智能与创客教育大会。

OpenInfra的博客 654

九州未来再度入选2024边缘计算TOP100

九州未来再度入选2024边缘计算TOP100。

OpenInfra的博客 559

三大细分领域入选,九州未来再登2024边缘计算产业图谱

边缘计算社区正式发布《2024边缘计算产业图谱》,九州未来凭借卓越的技术实力、创新能力以及开源贡献,入选边缘计算平台、边缘计算开源、边缘云服务提供商共三项细分领域。

OpenInfra的博客 674

九州未来亓绚亮相丽台Solution Day 2024,共建AI赋能教育新时代

九州未来亓绚受邀参加丽台Solution Day 2024,并作为特邀合作伙伴携OpenHydra AI教育平台亮相展台交流区,带来以“OpenHydra人工智能教育,让老师轻松开展AI实践课”为主题的精彩展示。

OpenInfra的博客 732

九州未来入选2024边缘云计算TOP50

九州未来入选2024边缘云计算TOP50。

OpenInfra的博客 455

《信息技术 开源 开源许可证框架》国家标准发布,九州未来参编

近日,九州未来参与起草的国家标准《GB/T 44272-2024 信息技术 开源 开源许可证框架》正式获批发布,并将于2025年3月1日起正式实施。

OpenInfra的博客 614
上一篇: 议程看点 | 似水流年,乌镇再聚首,九州云携手用户会聊些什么?
下一篇: OpenStack温哥华峰会精彩回顾(一):Edge Computing(含PPT)
OpenInfra
OpenInfra 企业官方账号 企业官方账号
博客等级 码龄9年 393粉丝 307原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值