前言

本书由来

过去十年,中国电信业快速发展,语音和数据业务需求极大提升,尤其当以安卓、iPhone为代表的智能手机推出后,数据业务的增长速度远超预期。近三年,移动数据业务每年以大约90%的复合增长率增长http://www.chyxx.com/industry/201708/546504.html。,这对设备商交付新版本的速度提出了更高的要求。中兴通讯在2013年就启动了无线接入网项目移植虚拟化技术预研,希望实现软硬件解耦以缩短版本交付周期,满足运营商业务飞速发展的需求。目前,这些虚拟化研究成果已经成为5G的基础技术标准。

虚拟化预研项目不仅涉及电信网元本身的适配,还涉及开发云操作系统和制定操作管理规范、接口标准。而云操作系统是虚拟化的关键技术之一,综合考虑云操作系统开源社区影响力、项目热度、扩展性、可维护性、业界认可度等因素,项目团队选择OpenStack作为云操作系统的开源解决方案。但电信领域常见的需求,如网口绑定、高速转发、巨页(Huge Page)、CPU绑核等功能在OpenStack社区尚不支持,如何把虚拟化的电信网元(Virtual Network Function)运行在OpenStack上,并提供高性能服务,是项目面临的巨大挑战。在此背景下,笔者所在的团队开始深入参与到OpenStack开源社区的开发工作中,推动社区一起解决这些关键技术问题。

计算、存储和网络是OpenStack虚拟层三大基础设施服务,其中存储(Cinder)项目涉及厂商的硬件集成。Cinder项目制定了一套API接口规范,厂商的存储设备若需要集成,需向社区提交遵守该接口规范的驱动程序,并搭建一套CI系统来验证,该CI系统需要遵守社区第三方CI规范https://docs.openstack.org/infra/system-config/third_party.html。

图0-1是一个简化的第三方CI系统架构图,厂商需要准备的有:

图0-1 第三方CI架构图

第三方CI系统,即本书所要讲述的OpenStack CI系统;该系统连接厂商的存储硬件,并与社区的Gerrit系统https://review.openstack.org。连接,监控stream-events事件流;当社区Gerrit有新的变更和补丁提交时,将变更代码与厂商提供的硬件环境进行集成测试并向社区Gerrit反馈测试结果;

本地OpenStack资源池,为第三方CI系统运行提供虚拟机资源;

存储设备,用于对变更代码进行验证。

通过这种机制,Cinder项目可以及时发现变更代码的兼容性问题,厂商也能及时发现变更代码对设备驱动的影响。所有第三方CI系统的执行结果都会显示在社区Gerrit系统每个代码变更的评审记录中。

OpenStack CI系统提供了一套动态调度测试任务的方法,极大提升了开发效率,具体优点如下:

提高CI系统的并发性,开发人员的多个变更测试任务不需要在环境排队等待执行,只要本地OpenStack资源池资源足够多,就可以并行执行所有测试任务,这可以显著减少开发人员的等待时间;

提高测试任务的可管理性,使用YAML文件描述测试任务,易阅读、评审,可进行版本管理,容易在不同团队之间复制和重用;

可定制虚拟机基础镜像,如支持不同的操作系统、不同的软件栈配置,增加了在项目实际使用中的适用性和灵活性;

提高测试任务的准确性,每次测试任务都在相同的环境和配置下执行,不存在静态环境中测试任务执行后对软件、配置文件等清理不完整而导致测试任务执行不一致的问题;

可复用云环境,统一运维资源,减少维护开销并提高资源利用率。

这套CI系统不仅适用于OpenStack社区组件研发,也适用于电信网元的开发。基于此,笔者所在的团队潜心研究OpenStack CI这套系统,结合自身需求,增强了CD的方案和实践,最终形成一套完整的CI/CD解决方案。这套解决方案在团队得到广泛应用,无论是内部的维护工作,还是对外的技术合作,都由该CI/CD系统提供技术支撑。公司数字化转型战略和敏捷实践触发了内部项目对CI/CD技术的重视,越来越多的团队渴望获得和提升这方面的技能。所以,笔者所在的团队作为开源技术的先锋,在给内部进行培训和技术转移的过程中,诞生了把对该系统的经验、实践汇总整理并出版成书的想法。

了解OpenStack的人很多,但对OpenStack CI系统有实际应用经验的人很少,主要是因为OpenStack CI系统目前只用于OpenStack社区基础设施的管理。国内DevOps思想和技术在最近两年才得到大规模接受和实践,大家对了解CI/CD相关技术的需求非常高。笔者很荣幸把这套适用性广、定制性强和并发性高的CI系统介绍给大家,同时回馈社区,推广和普及这些基础设施技术。目前,国内外几乎没有该套系统的完整描述,因其组件众多,且搭建该系统需要投入大量的人力物力(笔者团队搭建该系统花费了近两个月的时间,这还是在使用社区已有安装脚本进行最简安装的情况下)。从目前已经接入的第三方CIhttps://wiki.openstack.org/wiki/ThirdPartySystems。环境来看,国内搭建OpenStack CI系统的公司凤毛麟角,说明在OpenStack技术如此普及的情况下,国内公司对这套OpenStack CI系统仍然知之甚少。希望本书能让读者少走弯路,事半功倍本书使用reStructuredText语言编写,团队因采用该工具而在格式排版方面节省了大量时间精力。

本书结构

本书从逻辑上可分为四部分:

第一部分(第1章和第2章)对DevOps的发展、文化和转型进行了简单说明,并引入本书的重点内容OpenStack CI/CD说明其对DevOps转型的重要性。

第二部分(第3~9章)以系统管理员视角对OpenStack CI/CD中的每一项关键技术进行详细的分析和阐述,这些关键技术包括:

■ 版本控制(Git)与代码评审(Gerrit)系统,开源社区最常用的代码管理和代码评审工具,Gerrit系统与本书介绍的持续集成系统和门控系统进行密切配合,共同完成整个开发流程。

■ 持续集成系统(Jenkins),最为流行的一款开源持续集成工具,用于代替人工进行重复的持续集成工作,同时也为促进持续交付提供技术支撑;该章还介绍了JJB(Jenkins Job Builder)工具,通过YAML文件来定义Jenkins任务,提升Jenkins任务的开发和运维效率。

■ 门控系统(Zuul),确保主线稳定,仅当与变更相关的所有测试都通过后,才会将变更合入相应的目标分支中。它保障了测试任务获得最大程度的并行,且在发生错误的情况下,自动回滚;它支持指定项目间变更依赖关系,解决跨项目集成问题,致力于守护项目及关联项目。

■ 资源管理系统(Nodepool),通过在OpenStack资源池中动态创建虚拟机并作为Jenkins Slave节点添加到Jenkins的资源池中,确保不同的测试之间互不影响;在测试结束后,删除使用过的虚拟机,保证对每个测试任务都能提供一致的测试环境;此外,Nodepool还集成了镜像制作功能,支持测试环境的定制开发。

■ 日志服务器,对所有测试任务提供统一的日志存储服务,以便回溯测试故障。

■ 日志分析系统,将测试过程中的测试日志导入Elasticsearch中,便于出现问题时,快速检查和分析故障。

■ 公共组件,重点介绍了支持OpenStack CI系统组件之间进行协作和通信的系统,包括任务分发(Gearman)、消息队列(ZeroMQ)和分布式协调服务(ZooKeeper)等组件。

第三部分(第10章)描述团队在社区工具和经验的基础上的经典实践,以及如何进行裁剪、扩展和定制化修改以满足团队需求。

第四部分(第11章)探讨当前解决方案中存在的不足和可行的优化方案,并描述了社区当前正在经历的变化和未来的演进路线。

尽管本书各章节功能相对独立,笔者建议顺序阅读第3~5章,因为这些章节大量使用了前序章节的基本概念和术语;其他章节可以根据需要进行翻阅。

本书读者

本书面向基础设施管理团队、DevOps团队或致力于了解CI/CD的技术人员,可作为学习OpenStack社区CI/CD基础设施解决方案的教材,协助你高效搭建社区第三方CI系统。

勘误与交流

笔者团队在编写本书的过程中虽已经进行了大量的内部评审和检验工作,但因时间紧、精力有限,难免会出现一些错漏,敬请广大专家和读者批评、指正。你可以把与本书相关的意见或建议发送到电子邮箱openzero@aliyun.com中。

本书中团队实践和示例代码都可以在GitHubhttps://github.com/openzero上进行下载,读者可以尝试使用并与我们进行探讨。

致谢

本书的创作团队是一支拥有丰富专业技术经验的团队,团队成员有十年以上电信领域的工作经验、四年以上开源社区技术研究和贡献经验。本书是团队智慧和多年经验的结晶。使用本书介绍的技术和经验,希望可以帮助你的团队高效管理公司内部的基础设施,节省大量人力资源,并提供快速而稳定的服务。

本书由创作团队在业余时间编写,占用了团队成员很多家庭生活的时间,每位成员都付出了极大的努力并克服了诸多困难,对此表示感谢。感谢所有团队成员不厌其烦,一次又一次地评审修订,以认真严谨的态度验证了本书所有的代码实践。感谢董文娟在本书编写过程中有力地组织、协调和推进,没有你辛勤的付出,本书不可能顺利完成。

在此,还要感谢我的领导潘峰、王前和施嵘,没有你们的信任和支持,不可能有本书的诞生。感谢中兴学院的闫林院长对本书的指导和建议。感谢OpenStack基础设施团队设计出如此优秀的工具和系统,感谢你们在日常工作中及时答疑解惑。感谢机械工业出版社的杨福川和李艺编辑的信任和支持,及时更正了本书中较多的排版问题。

张军