相信你们之前应该接触过持续集成(Continuous integration)持续交付(continuous delivery)持续发布(continuous deployment)的概念,下面咱们来讲说三者的差别以及团队如何入手 CI/CD。前端
做者:猫神。webpack
开发者尽可能时时刻刻合并开发分支至主干分支。避免直到发布日才开始合并,掉入集成地狱。不管什么时候新分支集成至项目,持续集成能够自动化测试持续验证应用是否正常。git
持续交付是持续集成的扩展,能够保证稳定的发布产品新特性。这意味着基于自动化测试,你能够也能够一键自动化发布。理论上,持续交付能够决定是按天,按周,按双周发布产品。若是确实但愿可以享受持续交付的好处,那么应该尽快发布到新产品中。一旦出现问题时能尽早排除。github
持续部署是持续交付的下一步。经过这一步,每一个新特性都自动的部署到产品中。可是若是出现未经过的测试用例将会终止自动部署。持续部署能够加速用户反馈新特性,避免发布日带来的压力。开发能够着力于开发系统,开发结束后几分钟就能够触达到用户。web
CI/CD 具体是个什么样的流程呢,以下图所示,差别仅在因而否自动部署。浏览器
<img src="https://img.alicdn.com/tfs/TB...; />安全
如今开发都讲究投入产出比,那么 CI/CD 具体须要作些什么呢?服务器
投入:微信
产出:并发
投入:
投入:
若是开发的是一个新项目,暂时尚未任何用户,那么每次提交代码后发布将会特别简单,能够随时随地发布。一旦产品开始开发后,就须要提升测试文化,并确保在构建应用程序时增长代码覆盖率。当您准备好面向用户发布时,您将有一个很是好的连续部署过程,在该过程当中,全部新的更改都将在自动发布到生产环境以前进行测试。
若是正在开发的是一个老系统,就须要放慢节奏,开始打造持续集成&持续交付。首先能够完成一些简单可自动化执行的单元测试,不须要考虑复杂的端到端的测试。另外,应该尽快尝试自动化部署,搭建能够自动化部署的临时环境。由于自动化部署,可让开发者去优化测试用例,而不是停下来联调发布。
一旦开始按日发布产品,咱们能够考虑持续部署,但必定要保证团队已经准备好这种方式,文档 & 售后支持 & 市场。这些步骤都须要加入到新产品发布节奏中,由于和用户直接打交道的是他们。
为了得到 CI 的全部好处,每次代码变动后,咱们须要自动运行测试用例。咱们须要在每一个分支运行测试用例,而不是仅仅在主干分支。这样能够最快速的找到问题,最小化问题影响面。
在初始阶段并不须要实现全部的测试类型。一开始能够以单元测试入手,随着时间扩展覆盖面。
并非全部的测试都是对等的,实际运行中能够作些取舍。
<img src="https://img.alicdn.com/tfs/TB...; />
单元测试实现起来既快成本又低,由于它们主要是对小代码块进行检查。另外一方面,UI 测试实施起来很复杂,运行起来很慢,由于它们一般须要启动一个完整的环境以及多个服务来模拟浏览器或移动行为。所以,实际状况可能但愿限制复杂的 UI 测试的数量,并依赖基础上良好的单元测试来快速构建,并尽快得到开发人员的反馈。
要采用持续集成,您须要对推回到主分支的每一个变动运行测试。要作到这一点,您须要有一个服务来监视您的存储库,并听取对代码库的新推送。您能够从企业预置型解决方案和云端解决方案中进行选择。您须要考虑如下因素来选择服务器:
自动化测试是 CI 的关键,但同时也须要团队成员接受 CI 文化,并非心血来潮晒两天鱼,而且须要保证编译畅通无阻。QA 能够帮助团队建设测试文化。他们再也不须要手动测试应用程序的琐碎功能,如今他们能够投入更多的时间来提供支持开发人员的工具,并帮助他们采用正确的测试策略。一旦开始采用持续集成,QA 工程师将可以专一于使用更好的工具和数据集促进测试,并帮助开发人员提升编写更好代码的能力。
以上文章主要是说明团队实现 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 许可证)