工程方法 - CI/CD

背景

  在比较小且快速的迭代开发过程中,持续验证系统的开发成果,小步快跑式地尽早确认,期望开发尽可能完全符合原始需求,或者依据产出进行快速修正。
  简单地说,是尽量减少人力手动操作,将一些日常工作交给机器进行自动化处理。如环境配置、单元测试、日志记录、打包部署等。
  一切业务的更替发展必须建立在稳定性的基础上。业务 RD 是平台服务的搭建者,书写出无 bug 的代码是夯实稳定性根基的重要手段。
   根据以往经验,开发流程中经常会出现如下问题:

  • RD 更为关注的是具体功能实现,往往容易忽略代码质量以及单测的重要性。
  • 以往 case 中,大概 70% 的线上 bug 都是因为代码质量问题导致。
  • 单测维护成本较高,存量覆盖耗时费力。
  • 单测流程不规范,新增逻辑往往忽略单测的维护。

目标

  • 降低风险:业务稳定性为核心目标。
  • 减少人工手动操作的繁琐程序。
  • 减少逻辑代码千行bug率。
  • 通过单测提前暴露问题,降低返工率,提高研发效率。
  • 能随时发版打包出可发布部署的版本。

CI/CD 工作原理

  1. 持续集成(Continuous Integration)

指开发人员在特定分支(频繁)提交代码后,立即执行构建和单元测试,代码通过测试标准后集成到主干的过程。强调的是分支代码的提交、构建与单元测试,这个过程的产出是单元测试报告。

持续集成指的是,频繁地(一天多次)将代码集成到主干。
持续集成的目的,就是让产品快速迭代,同时还能保持高质量。
它的核心措施是,代码集成到主干之前,必须通过自动化测试,只要有一个测试用例失败,就不能集成。

20190914194149.png

  1. 持续交付(Continuous Delivery)

是在持续集成的基础上,将构建的代码部署到「类生产环境」,完成QA测试过程之后手动部署到生成环境的过程。强调代码部署,这个过程产出测试报告。

频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。持续交付可以看成是持续集成的下一步,它强调的是,不管怎么更新,软件是随时随地可以交付的。

20190914194413.png

  1. 持续部署(Continuous Deployment)

是持续交付的下一步,强调部署生产环境代码的过程自动化,同时可以处理上线通知等操作。

持续部署是持续交付的下一步,指的是代码通过评审后,自动地部署到生产环境。持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。

20190914194507.png

根据以上是3个步骤的循环迭代,就可以针对每个软件系统每次代码变动,持续自动地进行验证。这些验证包括以下方面

1. Build
2. Test
3. Source Code Analysis
4. Auto Deployment

通过这个流程,可以确保软件质量,不会因为一个变动而产生错误甚至崩溃。同时,流程的最后会产出一些质量报告,用做后续分析并发现软件中仍然潜在的问题

工具的选择

作为工作流中不可或缺的一环,CI 系统的目标是打造集 iOS 应用测试,集成,测试与打包为一体的平台,支撑 iOS 应用的质量保障及持续交付。

主要有以下 3 中工具:老牌的 Jenkins,插件齐全的 MCI, Hyperloop。

Jenkins

  Jenkins 是一个基于 JAVA 、开源的持续集成平台。Jenkins 的一个强大之处是支持插件,所以可以按需扩展出各种各样的功能,形成独特的平台。
  一个集群由一台 master 及数台 slave 组成, slave 可以有多个 executor 用于执行 job,job 可以是构建,单测,管理 slave 等。
  Jenkins的功能完整,也提供了上千個插件 (Plugins) 來应对各种开发语言和工具。Jenkins 目前已发展到了 2.x 版,新版本中对于 Pipeline 概念及容器 (Container) 整合也趋于完整,是一套可以自定义运行的系統。但也因為其功能強大、可定制程度高,上手使用需要一些时间。然而一旦流程被定义好,并整合好相关环境,它就可以发挥持续整合的威力,大幅提高开发生产力。

运作流程

构建(以单测为例)

20190921165111.png

打包(以 beta 版本为例)

20190921165232.png


--------- 本文结束 感谢您的阅读 ---------
0%
;