【摘要】 持续集成/持续交付(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)相关内容。

作者:伦语春秋

DevOps on DevCloud|如何采用流水线践行CI/CD理念【华为云技术分享】的更多相关文章

  1. 【华为敏捷/DevOps实践】7. 敏捷,DevOps,傻傻不分清楚【华为云技术分享】

    文:姚冬(华为云DevCloud首席技术布道师,资深DevOps与精益/敏捷专家,金融解决方案技术Leader,中国DevOpsDays社区核心组织者) 前言 敏捷是什么?DevOps是什么?两者有什 ...

  2. “如何实现集中管理、灵活高效的CI/CD”在线研讨会精彩内容分享

      "如何实现集中管理.灵活高效的CI/CD"在线研讨会精彩片段分享 片段主讲人:李培(西瓜刀) 大家好,我是李培.前面听文老师讲DevOps,包括CI/CD 的一些理论,也是挺有 ...

  3. 群晖下 gitea+drone+harbor实现CI/CD 发布到云服务器

    常用命令 sudo -i然后输入密码登录root账户(群晖默认只能使用admin账号登陆) vim xxx编辑(编辑是进去之后按i,退出并保存是按esc,然后:wq!再回车) mkdir xx创建文件 ...

  4. 前端静态站点在阿里云自建 K8S DevOps 集群上优雅的进行 CI/CD

    目录 网站 域名 K8S DevOps 集群 私有 Gitlab 使用 Docker 编译站点 * Dockerfile * 构建编译 Image * 测试编译 Image * 推送镜像到 Aliyu ...

  5. Go-Zero 短链项目 DevOps 实战,利用 Drone CI/CD 打通上云(Kubernetes)迭代流程

    Go-Zero 官方短链项目教程:快速构建高并发微服务 关于 go-zero,大家可以看文档.为少认为它是中国目前最好用的 golang 微服务框架. 完整的 Go-Zero ShortUrl Dev ...

  6. 【漫话DevOps】Agile,CI/CD,DevOps

    随着DevOps理念的普及与扩散,可能会被一大堆名字概念搞的莫名其妙,理清它们之间的关系可以帮助团队知道DevOps如何落地,改善工作流程. Here's a quick and easy way t ...

  7. CI Weekly #1 | 这份周刊,带你了解 CI/CD 、DevOps、自动化测试

    原文首次发布与 flow.ci Blog >> 链接,转载请联系:) 准备了很久,CI Weekly 第一期终于来了. CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分 ...

  8. 深入了解CI/CD:工具、方法、环境、基础架构的全面指南

    本文来自Rancher Labs 持续集成和持续交付(CI/CD)是DevOps背后的助推力之一.如果你的企业正在考虑使用DevOps,那么CI/CD绝对是需要考虑的其中一部分.但是CI/CD到底意味 ...

  9. 如何搭建安全的 CI/CD 管道?

    Eolink 前端负责人黎芷君进行了<工程化- CI / CD>的主题演讲,围绕 CI/CD 管道安全的实践,分享自己在搭建 CI/CD 管道过程中所总结的重要经验,与开发者深入讨论 &q ...

随机推荐

  1. NOIP模拟 19

    最近试考的脑壳疼 晚上还有一场555 T1 count 研究性质题. 研究好了AC,研究不明白就没头绪 首先枚举n的因子d 其次发现因为是树,所以如果合法,贡献只能是1 然后发现如果合法,一定是一棵一 ...

  2. Spring Boot 2.x实战之StateMachine

    本文首发于个人网站:Spring Boot 2.x实战之StateMachine Spring StateMachine是一个状态机框架,在Spring框架项目中,开发者可以通过简单的配置就能获得一个 ...

  3. hadoop2.9.0之前的版本yarn RM fairScheduler调度性能优化

    对一般小公司来说 可能yarn调度能力足够了 但是对于大规模集群1000 or 2000+的话  yarn的调度性能捉襟见肘 恰好网上看到一篇很好的文章https://tech.meituan.com ...

  4. html5 微信真机调试方法vConsole

    html5 微信真机调试方法 vConsolehttps://blog.csdn.net/weixin_36934930/article/details/79870240

  5. 关于github 新工程上传代码 git 命令

    1.git init // 初始化git文件 2.git add . //添加上传全部文件 "."代表全部 3.git remote add origin  git····//gi ...

  6. [Bootstrap] Bootstrap学习笔记

    1.因为bootstrap用到了html5的特性,为了正常使用,需要在最开头加上<!DOCTYPE html> 2.Bootstrap需要JQuery才能正常工作,所以需要导入jquery ...

  7. Java枚举——枚举的作用、使用方法、使用场景

    枚举的定义 枚举关键字enum 枚举类是一种特殊类,它和普通类一样可以使用构造器.定义成员变量和方法,也可以实现多个接口,但不能继承类. 枚举的使用 enum Color { RED, BLUE, G ...

  8. hdu 1166 敌兵布阵 (线段树、单点更新)

    敌兵布阵Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  9. hdu 1880 魔咒词典(双hash)

    魔咒词典Time Limit: 8000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  10. nyoj 517-最小公倍数 (python range(start, end) range(length))

    517-最小公倍数 内存限制:64MB 时间限制:1000ms 特判: No 通过数:2 提交数:11 难度:3 题目描述: 为什么1小时有60分钟,而不是100分钟呢?这是历史上的习惯导致. 但也并 ...