精读《延续集成 vs 延续托付 vs 延续布置》

一、择要

置信人人之前应当打仗过延续集成(Continuous integration)延续托付(continuous delivery)延续宣布(continuous deployment)的观点,下面我们来讲说三者的差别以及团队怎样入手 CI/CD。

作者:猫神。

二、差别

2.1 CI 延续集成

开辟者只管每时每刻兼并开辟分支至骨干分支。防止直到宣布日才最先兼并,掉入集成地狱。不管何时新分支集成至项目,延续集成可以自动化测试延续考证运用是不是一般。

2.2 CD 延续托付

延续托付是延续集成的扩大,可以保证稳固的宣布产物新特征。这意味着基于自动化测试,你可以也可以一键自动化宣布。理论上,延续托付可以决议是按天,按周,按双周宣布产物。假如确切愿望可以享用延续托付的优点,那末应当尽快宣布到新产物中。一旦涌现题目时能尽早消除。

2.3 CD 延续布置

延续布置是延续托付的下一步。经由历程这一步,每一个新特征都自动的布置到产物中。然则假如涌现未经由历程的测试用例将会停止自动布置。延续布置可以加速用户反应新特征,防止宣布日带来的压力。开辟可以出力于开辟体系,开辟完毕后几分钟就可以触到达用户。

三、合作

CI/CD 详细是个什么样的流程呢,以下图所示,差别仅在于是不是自动布置。

<img src=”https://img.alicdn.com/tfs/TB…; />

如今开辟都考究投入产出比,那末 CI/CD 详细须要做些什么呢?

Continuous Intergretion 延续集成

投入:

  • 须要为每一个新特征编写测试用例
  • 须要搭建延续集成效劳器,监控骨干堆栈,并自动运转测试用例
  • 开辟须要只管频仍的兼并分支,最少一天一次

产出:

  • 更少的 bug,由于自动化测试可以回归测试产物
  • 编译布置产物更简化,由于集成的题目都尽早的处理了
  • 开辟者可以只管削减上下文切换,由于构建的时刻就暴露题目,尽早处理了
  • 测试本钱下降,由于 CI 效劳器可以一秒运转几百个测试用例
  • 测试团队花更少的时候测试,可以重点关注测试上的革新。

Continuous delivery 延续托付

投入:

  • 须要有延续集成的基本,测试用例须要掩盖充足的代码
  • 布置须要自动化,用户只须要手动触发,盈余的布置应当自动化
  • 团队须要增添新特征标志,防止未完成的新特征进入待宣布的产物
    产出:
  • 布置软件变得异常简朴。团队不须要花费 n 天预备宣布。
  • 可以进步宣布频次,加速新特征触达用户历程。
  • 小的变动,对决议计划的压力要小得多,可以更快地迭代。

Continuous deployment 延续布置

投入:

  • 测试必需要做到充足。测试的质量将决议宣布的质量。
  • 文档建立须要和产物布置坚持同步。
  • 新特征的宣布须要谐和其他部门,包含售后支撑&市场&推行等。
    产出:
  • 疾速的宣布节拍,由于每一个新特征一旦完成都邑自动的宣布给用户。
  • 宣布风险下降,修复题目更轻易,由于每次变动都是小步迭代宣布。
  • 用户可以看到延续性的优化和质量提拔,而不是非要比及按月,按季度,以至按年

假如开辟的是一个新项目,暂时还没有任何用户,那末每次提交代码后宣布将会迥殊简朴,可以随时随地宣布。一旦产物最先开辟后,就须要进步测试文明,并确保在构建运用程序时增添代码掩盖率。当您预备好面向用户宣布时,您将有一个异常好的一连布置历程,在该历程当中,一切新的变动都将在自动宣布到临盆环境之前举行测试。

假如正在开辟的是一个老体系,就须要放慢节拍,最先打造延续集成&延续托付。起首可以完成一些简朴可自动化实行的单元测试,不须要斟酌庞杂的端到端的测试。别的,应当尽快尝试自动化布置,搭建可以自动化布置的暂时环境。由于自动化布置,可以让开辟者去优化测试用例,而不是停下来联调宣布。
一旦最先按日宣布产物,我们可以斟酌延续布置,但一定要保证团队已预备好这类体式格局,文档 & 售后支撑 & 市场。这些步骤都须要加入到新产物宣布节拍中,由于和用户直接打交道的是他们。

四、怎样最先延续集成

4.1 相识测试范例

为了取得 CI 的一切优点,每次代码变动后,我们须要自动运转测试用例。我们须要在每一个分支运转测试用例,而不是仅仅在骨干分支。如许可以最疾速的找到题目,最小化题目影响面。
在初始阶段并不须要完成一切的测试范例。一最先可以以单元测试入手,跟着时候扩大掩盖面。

  • 单元测试:局限异常小,考证每一个自力要领级别的操纵。
  • 集成测试:保证模块间运转一般,包含多个模块、多个效劳。
  • 验收测试:与集成测试相似,然则仅关注营业 case,而不是模块内部自身。
  • UI 测试:从用户的角度保证显现准确运转。

并非一切的测试都是对等的,现实运转中可以做些弃取。

<img src=”https://img.alicdn.com/tfs/TB…; />

单元测试完成起来既快本钱又低,由于它们主如果对小代码块举行检查。另一方面,UI 测试实行起来很庞杂,运转起来很慢,由于它们一般须要启动一个完全的环境以及多个效劳来模仿浏览器或挪动行动。因而,现实情况能够愿望限定庞杂的 UI 测试的数目,并依靠基本上优越的单元测试来疾速构建,并尽快取得开辟人员的反应。

4.2 自动运转测试

要采纳延续集成,您须要对推回到主分支的每一个变动运转测试。要做到这一点,您须要有一个效劳来看管您的存储库,并听取对代码库的新推送。您可以从企业预置型处理方案和云端处理方案中举行挑选。您须要斟酌以下因夙来挑选效劳器:

  • 代码托管在那边?CI 效劳可以接见您的代码库吗?您对代码的生计位置有特别的限定吗?
  • 运用程序须要哪些操纵体系和资本?运用程序环境是不是受支撑?能装置准确的依靠项来构建和测试软件吗?
  • 测试须要若干资本?一些云运用程序能够对您可以运用的资本有限定。假如软件斲丧大批资本,能够愿望将 CI 效劳器宿主在防火墙背面。
  • 团队中有若干开辟人员?当团队实践 CI 时,天天都邑将许多变动推回到主存储库中。关于开辟人员来讲,要取得疾速的反应,您须要削减构建的行列时候,而且您须要运用可以供应准确并发性的效劳或效劳器。
    在过去,一般须要装置一个自力的 CI 效劳器,如 Bamboo 或 Jenkins,但如今您可以在云端找到更简朴的处理方案。比方,假如您的代码托管在 BitBucket 云上,那末您可以运用存储库中的 Pipelines 功用在每次推送时运转测试,而无需设置零丁的效劳器或构建代办,也无需限定并发性。
  • 运用代码掩盖率查找未测试的代码。一旦您采纳了自动化测试,最好将它与一个测试掩盖东西结合起来,协助相识测试套件掩盖了若干代码库。代码掩盖率定在 80%以上是很好的,但要注重不要将高掩盖率与优越的测试套件殽杂。代码掩盖东西将协助您找到未经测试的代码,但在一天完毕的时刻,测试的质量会发生影响。假如刚最先,不要急于取得代码库的 100%掩盖率,而是运用测试掩盖率东西来找出运用程序的症结部份,这些部份还没有测试并从那边最先。
  • 重构是一个增加测试的时机。假如您将要对运用程序举行严重变动,那末应当起首缭绕能够受到影响的特征编写验收测试。这将为您供应一个安全网,以确保在重构代码或增加新功用后,原始行动不会受到影响。

五、接收 CI 文明

自动化测试是 CI 的症结,但同时也须要团队成员接收 CI 文明,并非心血来潮晒两天鱼,而且须要保证编译通顺无阻。QA 可以协助团队建立测试文明。他们不再须要手动测试运用程序的噜苏功用,如今他们可以投入更多的时候来供应支撑开辟人员的东西,并协助他们采纳准确的测试战略。一旦最先采纳延续集成,QA 工程师将可以专注于运用更好的东西和数据集增进测试,并协助开辟人员进步编写更好代码的才能。

  • 尽早集成。假如很长时候不兼并代码,代码争执的风险就越高,代码争执的局限就越广。假如发明某些分支会影响已存在的分支,须要增添宣布封闭标签,防止宣布时两个分支争执。
  • 保证编译每时每刻通顺。一旦发明任何编译题目,马上修复,不然能够会带来更多的毛病。测试套件须要尽快反应测试效果,或许优先返回短时候测试(单元测试)的效果,不然开辟者能够就切换回开辟了。一旦编译失足,须要关照给开辟者,或许更进一步给出一个 dashboard,每一个人都可以在这里检察编译效果。
  • 把测试用例归入流程的一部份。确保每一个分支都有自动化测试用例。好像编写测试用例拖慢了项目节拍,然则它可以削减回归时候,削减每次迭代带来的 bug。而且每次测试经由历程后,将会异常有信息兼并到骨干分支,由于新增的内容不影响之前的功用。
  • 修 bug 的时刻编写测试用例。把 bug 的每一个场景都编写成测试用例,防止再次涌现。

六、集成测试 5 个步骤

  1. 从最严厉的代码部份入手测试
  2. 搭建一个自动构建的效劳自动运转测试用例,在每次提交代码后。
  3. 确保团队成员天天兼并变动
  4. 代码涌现题目实时修复
  5. 为每一个新完成的操纵编写测试用例。
    能够看着很简朴,然则请求团队可以真正落地。一最先你须要放慢宣布的脚步,须要和 pd、用户沟通确保不上线没有测试用例的新功用。我们的发起是从小处入手,经由历程简朴的测试来顺应新的例程,然后再动手完成更庞杂更难治理的测试套件。

七、说说笔者的团队

以上文章主如果申明团队完成 CI/CD 的弃取和可行性步骤。下面来讲说愿望 CI/CD 给笔者团队带来什么样的变化。现在笔者团队已完成前端项目宣布编译工程化,采纳的是基于 webpack 的自建东西云构建形式。但如今面对的题目是 1. 交互的体系比较多,交互体系供应的接入源变动后,须要人工关照其他体系手动触发编译,而且每次手动编译都须要在当地切换到指定分支,然后手动触发云构建,2. 多人合作,分支拆分较细,须要手动兼并分支,触发编译。全部流程冗杂,而且中心存在人力沟通本钱,轻易发生沟通偏差。所以起首愿望处理的是 CI 自动化,当依靠变动后或许分支兼并后,自动集成,自动编译。固然临盆环境暂时还不敢瞎搞,但大部份反复编译的工作量重要集合在预发环境,所以手动布置临盆环境的本钱照样可以接收的。CI 自动化之前,须要供应体系之间交互的单元测试用例,每次 CI 后自动运转单元测试用例,最好能买通 QA 的测试用例,举行回归测试。流程对照以下:

<img src=”https://img.alicdn.com/tfs/TB…;/>
可以看出引入CI后,我们的本钱是须要搭建CI效劳器,新增单元测试、买通回归测试案例,但前者可以加速体系编译效力,后者可以进一步的提拔代码质量,削减回归测试时候,这些本钱都是可以接收的。市面上已有许多开源延续集成东西,比方我们熟习的Jenkins,另有TeamCity、Travis CI、GO CD、Bamboo、Gitlab CI、CircleCI……等等等等。现在还在继承调研中,这片文章应当会有第二篇,说说后续的实践和CD。

议论地点是:
精读《延续集成 vs 延续托付 vs 延续布置》 · Issue #147 · dt-fe/weekly

假如你想介入议论,请 点击这里,每周都有新的主题,周末或周一宣布。前端精读 – 帮你挑选靠谱的内容。

关注
前端精读微信民众号

<img width=200 src=”https://img.alicdn.com/tfs/TB…;>

special Sponsors

版权声明:自在转载-非商用-非衍生-坚持签名(
创意同享 3.0 许可证

    原文作者:黄子毅
    原文地址: https://segmentfault.com/a/1190000019033862
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞