一切优秀理念和方法论的大规模普及,都有赖于先进技术的发展以及对应工具的发明创造来承载,DevOps持续交付理念亦不例外。软件开发是截至目前,人类最复杂、最不可控的工程技术工作,一次代码提交到上线,会涉及数十、数百、乃至数千个步骤、命令、服务、应用和环境,如果我们没有自动化交付流水线来不断提升自动化率,实施可重复且可靠的交付运作,而按照传统的以流程文档和操作规范指引、通过手工操作来进行交付活动的话,其工作效率之低、错误率之高已经和正在被诸多没有采用DevOps开发模式和持续交付工具链的企业所验证。
KK谈DevOps持续交付理念和方法论
Kohsuke Kawaguchi(KK)作为Jenkins的创始人,同时也是CloudBees公司CTO,是将DevOps持续交付理念进行工具工程化实践的第一人,更是推动DevOps理念大规模普及的灵魂人物之一。作为软件开发端到端持续交付系统,Jenkins用户量达200+万,在持续交付流水线专业工具领域市场占有率超90%,是事实上的流水线工具标准。
日前,在2018华为全联接大会上,KK带来主题为《Super Powers Coming to Your Jenkins》的精彩演讲,内容涉及DevOps CI/CD持续交付理念和方法论,以及Jenkins流水线Blue Ocean、Cloud Native Jenkins、Jenkins Evergreen、Jenkins X等面向不同场景的产品解决方案及关键技术。
例如,有了Cloud Native Jenkins,通过云化和弹性扩容降低单点故障,用户就不会在周五晚上接到Jenkins服务宕机需要修复的连环夺命call,也无需做资源的预留以降低运维成本和前期投资,未来也将会有更高的性能表现。
Jenkins Evergreen提供了预置模板,用户仅需几次点击,在几分钟内即可生成一条可持续工作的流水线,大大简化流水线的配置步骤,有效降低配置门槛。Evergreen所有的配置均由Jenkins管理,可在线升级,用户只需专注于自己的业务开发和交付即可,无需关注各种复杂的流水线配置和组件管理。
Jenkins configuration as code实践一切配置即代码,用户可通过编写YAML脚本来对接插件、安全工具、检查工具、文档服务等,任何工具或者服务均可以通过脚本来实现对接。基于此,用户可以对版本控制、代码审计、滚动部署等环节跟踪查看,精确追溯插件集及其版本,使用户对各种更改更有信心。
随着新型云操作系统kubernetes的兴起,用户需要跟进学习一大堆新知识、工具和服务,比如如何往容器迁移,如何安装和实施k8s,如何将容器安装到k8s,k8s的生态系统和工具链对比选型等等,总而言之,适配Kubernetes绝非易事。Jenkins X致力于提供持续交付云原生应用的最佳实践,涵盖构建、测试、审查、变更、协作等各种最优产品。
华为云DevCloud Cloudpipeline实践分享
此外,会上华为专家还向与会者介绍了DevCloud Cloudpipeline实践。华为云专家讲道,华为研发模式先后经历了手工作坊、IPD、测试自动化工厂、CI、CD、DevOps等各种研发模式的变迁,随之进行了对应的组织和流程变革,并产生了相应的工具平台来承载这些模式的落地和运行。随着研发模式、组织、流程、工具的不断变革,产品交付效率大幅提升,TTM时长从过去的1~1.5年缩短至2~6周。一些偏互联网化的产品,迭代周期缩短至1周,每天可以并行发布多个微服务。
在这个过程中,自动化的持续交付流水线平台/服务,是最核心的工程实践。基于流水线,以代码提交到上线的端到端交付周期的缩短作为目标驱动,使得各服务自动化能力和并发效率实现大幅提升改进,比如手工转自动化测试、容器化构建、基础设施即代码、容器化部署、灰度发布服务等,确保产品最终的可重复、可靠的快速迭代发布。
华为内部8万研发员工,最初使用的基本都是商用开发工具,而这些工具很难满足产品敏捷交付的需求,毕竟产品的敏捷和快速迭代,有赖于工具平台的敏捷和快速迭代能力的支撑。因而全面转向了开源,并在保证100%兼容原生开源系统的同时,进行云化、服务化、单点登录、多region、高并发、高可靠、高安全、面向不同行业和解决方案场景等方面持续强化,构筑产品核心竞争力。
当华为意识到,华为内部面临的软件持续交付工具链搭建、运维的核心痛点,其他企业也会面临时,便将工具链对外提供服务。希望通过可视化、灵活编排的自动化持续交付流水线及DevOps工具链,实现不中断业务升级,产品分钟级发布上线,助力企业大幅缩短交付周期,提升交付效率和产品质量。
华为产品团队和代码规模跨度极大,一些典型的大产品,代码量达1000+万行,团队规模也达1000+人,不仅组件多,团队也多,相互依赖更多。同时,华为大平台战略带来一个现象,就是产品通常依赖于另外一个独立BG下的一个大平台产品,且业务BG内部还会有自己的小平台产品,这样导致一个产品会依赖于好几个不同团队交付的不同平台。而由于产品规模太大,业务特性达数千个,模块也往往达到数十上百个。不同部门使用的环境和组网也会存在极大差异。
在这种复杂的环境下,华为构建了分层分级持续交付流水线,分为个人级、项目级、子系统级、产品级(版本级)、解决方案级等数级流水线,通过流水线编排工作流、触发下一级流水线的执行来保障产品团队和组件之间的协同交付。
在这个过程中,配套L1-L4分级测试模型,在不同层级流水线执行不同的自动化测试策略,并设置每个阶段任务对应的质量门禁来判断是否允许流水线继续执行。通过多级流水线的层层防护,使得缺陷发现前移,有效保障了产品质量。
对应于最新的微服务化的产品形态,配套提供了微服务持续交付流水线模板。区别于传统产品持续交付流水线,微服务流水线在角色权限上匹配全功能团队全栈工程师的角色权限模型,SDE可以从代码提交并端到端执行流水线直至微服务发布上线。同时,构建出镜像,并实施容器化部署、灰度发布策略、失败自动回滚策略,微服务可按天、按小时甚至分钟级灰度发布上线。
针对静态资源提供了持续部署流水线,流水线从软件包变更开始执行,到跨多region并行部署,实现多区多服务器的静态资源包自动更新。
在相关配套技术和服务中,灰度发布能力、极速构建、基础设施即代码、配置即代码、Docker、K8s、自动部署、自动化测试、CloudPipeline CDDL(Continious Deliver Domain Language)描述文件等尤为关键。灰度发布、蓝绿部署等策略可以确保不中断服务升级。增量构建、并行构建、依赖预读与缓存、容器化slave等不断提升构建速度,从小时级进入分钟级。通过容器化技术使得环境标准化,有效消除DTAP四大环境间的差异,减少环境配置、部署和问题定位成本。CDDL描述语言定义流水线的编排和各服务接入标准。人工审核可以在自动化能力未达到完全保障质量的情况下,增加评审人来把控下发布质量。
自动化一切、代码化一切、服务化一切、版本化一切、数据化一切、可视化一切,是流水线和DevOps平台的基本方向。未来还会包括智能化一切。同时,DevCloud流水线支持百万级并发调度能力能力,并提供可视化看板,和任务健康度(执行成功率)、及流水线整体、阶段、任务三级执行时长直观展示。
在DevCloud on DevCloud的dogfooding吃狗粮实践分享中,提及在传统自动化测试理念上,探索在线测试的新方法和理念、实践,并逐步加大在线测试比重,以便进一步缩短TTM、提升产品质量。
在演讲末端,华为专家基于现网进行了“一次修改如何快速上线”的实战演示,这种基于现网的现场演示,是需要十分的底气和自信的,也彰显了DevCloud华为软件开发云服务的质量可信度。
华为正致力于Jenkins网站的中文本地化工作,且一直以来双方共同探索在社区等各方面更深层次的合作,希望Jenkins和DevCloud华为软件开发云服务能够共同为大家提供更好的持续交付流水线服务。
最后,“The more you build quality into systems — through automation & shorter cycle times — the more you increase throughput & stability”,用流水线所承载的快速、可靠、可重复的持续交付使命作为结束吧。