[ Laravel从入门到精通 ] 测试系列 —— 持续集成的定义和常用工具对比

栏目: PHP · 发布时间: 5年前

内容简介:持续集成(Continuous Integration,简称CI)是一种软件开发实践,指的是将代码频繁地集成到主干分支,并且在提交、合并代码时对项目进行构建、编译和测试,如果测试不过,则不能集成,整个流程如下图所示:

[ Laravel从入门到精通 ] 测试系列 —— 持续集成的定义和常用 <a href='https://www.codercto.com/tool.html'>工具</a> 对比

定义

持续集成(Continuous Integration,简称CI)是一种软件开发实践,指的是将代码频繁地集成到主干分支,并且在提交、合并代码时对项目进行构建、编译和测试,如果测试不过,则不能集成,整个流程如下图所示:

[ Laravel从入门到精通 ] 测试系列 —— 持续集成的定义和常用工具对比

与持续集成相似的还有两个概念,那就是持续交付和持续部署。

持续交付(Continuous Delivery)指的是频繁地将集成到主干后的软件新版本,手动部署到准生产环境,交付给质量团队或者用户以供评审,如果评审通过,则可以发布上线,可以看作是持续集成的下一步:

[ Laravel从入门到精通 ] 测试系列 —— 持续集成的定义和常用工具对比

持续部署(Continuous Deployment)则是在持续交付的基础上,把部署到生产环境的过程自动化:

[ Laravel从入门到精通 ] 测试系列 —— 持续集成的定义和常用工具对比

目标

持续集成主要有两个好处:

  • 更早发现错误:每完成一点更新,就集成到主干,可以更早发现错误,定位错误也比较容易;
  • 防止分支大幅偏离主干:如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。

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

工作流程

下面我们用一张图来介绍持续集成的工作流程:

[ Laravel从入门到精通 ] 测试系列 —— 持续集成的定义和常用工具对比

  • 开发人员在自己的本地计算机上检查(测试)代码
  • 检查完成后,将本地开发分支代码变更提交/合并到主干
  • 代码仓库触发请求到 CI 系统
  • CI 服务器运行任务(测试、代码覆盖率、检查语法等)
  • CI 服务器发布已保存的工件(Artifacts)用于测试
  • 如果构建或测试失败,CI 服务器会向开发人员发出警报
  • 开发人员修复问题,再次进行提交/合并代码

可见要实现持续集成,我们需要使用一个代码仓库来对代码分支进行管理,常见的代码仓库包括 Github、Gitlab、CODING、码云等,此外代码集成到主干前的所有构建、测试工作都是在 CI 系统中完成的,常见的 CI 系统有 CircleCITravis CI 以及 Jenkins 等,有些系统支持自己搭建,比如 Jenkins,CircleCI、Travis CI 则以云服务的方式提供服务,更加轻量级。

在开始演示持续集成实现示例之前,我们先简单对比介绍下这几个 CI 系统。首先从 CircleCI 开始。

CircleCI

[ Laravel从入门到精通 ] 测试系列 —— 持续集成的定义和常用工具对比

特性:

  • CircleCI 是一个基于云服务的系统,不需要专用服务器,无需对其进行管理和维护,不过,它还是提供了一个本地解决方案,允许您在私有云或数据中心中运行它;
  • 即使是商业帐户,它也提供了免费计划;
  • Rest API:基于这些 API 你可以访问项目、构建和工件,构建的结果将会是工件或工件组,工件可以是已编译的应用程序、可执行文件(例如 Android APK)或元数据(例如关于测试成功的信息);
  • CircleCI 缓存必要的安装,它会检查第三方依赖项,而不是持续安装所需的环境;
  • 如果出现任何问题,你可以通过 SSH 模式访问容器并进行检查;
  • 总而言之,这是一个需要最少配置和调整的、完整的开箱即用解决方案。

与以下产品兼容:

  • Python、Node.js、 RubyJavaGoPHP 等;
  • Ubuntu、Mac OS X(付费账户);
  • Github、Bitbucket;
  • AWS、Azure、Heroku、 Docker 、专用服务器;
  • Jira、HipChat、Slack。

优点:

  • 快速启动;
  • 针对企业项目有免费计划;
  • 容易上手;
  • 轻量级,易读的 YAML 配置;
  • 不需要任何服务器就可以运行。

缺点:

  • 仅支持两个版本的 Ubuntu 免费(12.04、14.04),MacOS 则需要付费;
  • 尽管可以在所有语言中使用,但「开箱即用」则仅支持以下编程语言:Go、Haskell、Java、PHP、 Python 、Ruby、Scala;
  • 如果想进行自定义,可能会遇到一些问题,需要借助一些第三方软件进行调整;
  • 此外,作为基于云服务的系统本身也是个双刃剑,一方面简单方便易上手,另一方面,它也可以停止支持任何软件,而你对此将毫无招架之力。

Travis CI

[ Laravel从入门到精通 ] 测试系列 —— 持续集成的定义和常用工具对比

Travis CI 和 CircleCI 在功能和使用上基本差不多,它们都基于 YAML 文件进行配置,都是基于云的,都支持基于 Docker 运行测试,此外,Travis CI 提供了一些 CircleCI 所没有的功能:

  • 可选择同时在 Linux 和 Mac OS X 上运行测试;
  • 「开箱即用」支持更多语言:Android、C、C#、C++、Clojure、Crystal、D、Dart、Erlang、Elixir、F#、Go、Groovy、Haskell、Haxe、Java、JavaScript(带 Node.js)、Julia、Objective-C、 Perl 、Perl6、PHP、Python、R、Ruby、Rust、Scala、Smalltalk、Visual Basic;
  • 支持 Build Matrix。

Travis CI 优点:

  • 开箱即用的 Build Matrix 功能;
  • 快速启动;
  • 轻量级 YAML 配置;
  • 针对开源项目的免费计划;
  • 无需专用服务器。

Travis CI 缺点:

  • 与 CircleCI 相比,价格更高,没有免费的企业计划;
  • 自定义(需要第三方支持)

Jenkins

[ Laravel从入门到精通 ] 测试系列 —— 持续集成的定义和常用工具对比

特性:

config.xml

优点:

  • 免费;
  • 自定义;
  • 插件系统;
  • 对系统的完全控制。

缺点:

  • 需要专用服务器来安装和运行,这会导致额外的费用,以及额外的运维成本;
  • 配置/自定义需要花费时间和精力。

结论

介绍完上述常见的 CI 系统,具体要选择哪一个取决于你的需求以及计划使用它的方式:

  • CircleCI 适用于小型项目,其主要目标是尽快开始集成;
  • 如果你开发的是开源项目,建议使用 Travis CI,因为这些项目需要在不同环境中进行测试;
  • Jenkins 适用于大型项目,在这些项目中,需要针对系统和流程进行大量的定制化工作,这些自定义可以通过使用 Jenkins 提供的各种插件来完成。

后续几篇教程,学院君将给大家演示如何基于上面三个 CI 系统来实现持续集成。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

编程人生

编程人生

Peter Seibel / 图灵俱乐部 / 人民邮电出版社 / 2011-1-1 / 79.00元

界顶尖的程序员是怎么走上编程道路的? 他们的编程工作创造和改变了人类历史,在这一过程中都有哪些经验和教训? 他们对计算机软件行业的过去、现在和未来有什么独到的看法和见解? 他们对培养、发现、选拔、面试优秀的程序员有什么建议? 放下手头的工作,听听这些软件先驱们的故事和建议,眼界可以更开阔,思路可以更清晰,方向可以更明确,人生可以更精彩。 作者Peter Seibel采......一起来看看 《编程人生》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

随机密码生成器
随机密码生成器

多种字符组合密码