【摘要】 持续集成/持续交付(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模拟 23

    曾经有一段真挚的AK摆在skyh面前,但他一直意淫自己AK导致没有AK. 如果非要把这AK加一个期限的话,skyh一辈子都AK不了了. 论爆零选手的爆零原因 我说T3想到了能AC的思路但是爆零了有人同 ...

  2. Ubuntu16.04安装Nginx+PHP5.6+MySQL5.6

    安装Nginx 1.首先添加nginx_signing.key(必须,否则出错) $ wget http://nginx.org/keys/nginx_signing.key $ sudo apt-k ...

  3. Linux学习(推荐学习资源)——保持更新

    1. 介绍 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的Unix工具软件.应用程序和网络协议. ...

  4. maven编码配置

    在环境变量里添加变量 MAVEN_OPTS -Xms256m -Xmx512m -Dfile.encoding=UTF-8

  5. HTML和css面试题:内容转载

    1.常见的块级元素 内联元素 div -最常用的块级元素 dl - 和dt-dd 搭配使用的块级元素 form - 交互表单 h1 -h6- 大标题 hr - 水平分隔线 ol – 有序列表 p - ...

  6. 【转载】常见十大经典排序算法及C语言实现【附动图图解】

    原文链接:https://www.cnblogs.com/onepixel/p/7674659.html 注意: 原文中的算法实现都是基于JS,本文全部修改为C实现,并且统一排序接口,另外增加了一些描 ...

  7. python获取随机验证码或者下发激活码

    http://stackoverflow.com/questions/2823316/generate-a-random-letter-in-python >>> import ra ...

  8. mongodb存储二进制数据

    mongodb 3.x存储二进制数据并不是以base64的方式,虽然在mongo客户端的查询结果以base64方式显示,请放心使用.下面来分析存储文件的存储内容.base64编码数据会增长1/3成为顾 ...

  9. JPA中使用@Query注解多表联查

    原生SQL: select `user`.id, `user`.`name`,dept.name deptName,sum(sd.score) SumScore from `user` LEFT JO ...

  10. Linux线上与本地的httpd搭建【制作本地yum源】

    当前时间 2019-10-24-10:53:12 制作本地yum源 我用的VMware Workstation 系统环境: CentOS 7.5 首先我们先要挂载系统镜像 [root@laopa ~] ...