DevOps on DevCloud|如何采用流水线践行CI/CD理念【华为云技术分享】
【摘要】 持续集成/持续交付(CI/CD,Continuous Integration/Continuous Deployment)在DevOps CMALS理念中具有支柱性地位,因而CI/CD流水线至关重要,将实现应用程序的构建、测试、部署与发布等自动化,提升软件交付的效率与质量。
引言:在“DevOps能力之屋(Capabilities House of DevOps)”中,华为云DevCloud提出(工程方法+最佳实践+生态)×工具平台=DevOps能力。华为云DevCloud将推出“DevOps on DevCloud”系列,针对DevOps领域场景,阐述该场景在华为云DevCloud上的实施方法与实践。
在企业数字化转型的趋势下,市场分析机构Forrester将DevOps作为数字化企业架构的重要支柱之一,是企业数字化运营体验的关键使能因素。同时,DevOps逐渐演进为软件工程的思维框架,旨在融合人员、流程与工具快速持续地向用户交付软件价值。持续集成/持续交付(CI/CD,Continuous Integration/Continuous Deployment)在DevOps CMALS理念中具有支柱性地位,因而CI/CD流水线至关重要,将实现应用程序的构建、测试、部署与发布等自动化,提升软件交付的效率与质量。
一提到流水线(Pipeline),人们会第一时间想到亨利·福特与T型汽车。据说亨利·福特在仔细观察过屠宰场流水线后,意外得到灵感,于1913年开发出了世界上第一条汽车流水线。福特把T型车的装配过程拆成了84个不同的步骤,汽车在一条流水线上就可以完成组装,这个革命性的创造使汽车的装配时间从原先12小时减少至90分钟,而且一年一年各个环节操作时间都会在技术升级中不断缩短,20世纪20年代,福特工厂每24秒流水线就能制造一辆汽车。流水线带给汽车工业的是“规模化”,更是“流程革命”。
1924年福特公司将流水线生产方式引入日本。两年以后,丰田公司采用福特的流水线生产方式进行第一辆A1型轿车和第一辆G1型卡车试制工作。后来丰田发现福特的生产线是有问题的,因为生产线上的每个产品由不同的人来进行生产,直到最后检测才会发现质量有问题。因此,丰田更加强调“精益效率”,开始在流水线上落实“适时生产”与“实时监控生产品质”。丰田的安灯绳(Andon Cord)使得流水线上的每个工序一旦发生问题,可以停止流水线,警灯响起,技术人员和管理人员马上赶赴现场帮助解决问题。
让我们从福特、丰田的流水线故事重新回到软件持续交付流水线。从福特、丰田的故事中,对于流水线有2个最为主要的特征:工序编排、质量监控。对于软件交付来讲,从代码提交,将经过代码质量检查、构建、测试、部署、发布等环节交付给客户,在每个环节需要进行质量把控。因此持续交付流水线,需要对各个环节的任务进行并行或串行编排,并且在相关环节任务上通过门禁实现“安灯绳”机制。
华为云DevCloud提供可视化分层分级、并行/串行、选择执行等编排能力;可以纳管代码检查、编译构建、 部署、测试、子流水线等等多类型任务;提供代码、定时、人工等3种触发方式;提供代码质量、测试等多种质量门禁;提供人工卡点方式。
1 准备工作
在DevOps on DevCloud系列文章“代码检查服务如何降低Java应用 ‘Billion Dollar Mistake’NPE风险”与“如何实现应用接口的混合驱动测试”中,我们介绍了华为云DevCloud的代码检查与接口测试服务。我们将在此基础上,阐述流水线的特性能力。
2 代码检查纳入流水线
开发者可以访问华为云DevCloud并进入项目CodeCheckBenchmark。在“构建&发布”-“流水线”页面,点击“新建流水线”,将流水线名称设置为“pl-cicd-cc”。
在“新建流水线”页面,对于流水线阶段二,首先将名称由“构建”修改为“代码质量”;其次点击“添加任务”,在“任务配置”页面选择“类型”为代码检查,并选择任务“cc-Code4Benchmark”;最后在“质量门禁”添加门禁任务,(1)如果没有门禁,需要点击创建,将门禁名称为“代码问题数”,门禁项为“CodeCheck问题数”,门禁阈值为3;(2)在“任务配置页面”的门禁处,选择“代码问题数”。详细参考可以参考图2-图3标注红框的地方,完成操作后,保存流水线。
流水线创建完毕后,可以在“流水线详情”页面执行流水线。正常情况下,流水线会在阶段“代码质量”停止执行,提示门禁不通过。
3 接口测试纳入流水线
华为云DevCloud提供了门禁项“API测试通过率门禁”,此门禁的值按照测试套件中测试用例的通过率进行计算。因此在流水线中使用该门禁,需要使用测试套件来管理相应的接口测试用例。
首先,进入项目Prj4ApiHDT,在接口测试页面,通过复制manageProject用例,新增2个测试用例,分别为creatProject(保留createProject、deleteProject测试步骤,项目名称可以进行修改)、queryWorkItemList(保留queryWorkItemList测试步骤,在URL中将参数修改为“1234”等任意值)。新建测试套件tsProject,并将3个测试用例添加到本测试套件。
其次,参考“代码纳入流水线”,新建流水线pl-cici-api。在阶段二将“接口测试”类型的任务tsProject添加到流水线中,并添加质量门禁“API测试门禁”,其门禁项为“API测试通过率”,门禁阈值为100%。详细操作可以参考图4中的红框相关操作。
本文通过案例初步展示了华为云DevCloud流水线相关的编排以及门禁能力。在实际项目中,流水线一般来讲涉及到更多的环节(例如构建、部署等),因此编排以及门禁等将更为复杂,读者可以参考华为云DevCloud HE2E DevOps实践(https://support.huaweicloud.com/bestpractice-devcloud/devcloud_practice_20072.html)相关内容。
作者:伦语春秋