[ 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 系统来实现持续集成。


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

查看所有标签

猜你喜欢:

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

Web Applications (Hacking Exposed)

Web Applications (Hacking Exposed)

Joel Scambray、Mike Shema / McGraw-Hill Osborne Media / 2002-06-19 / USD 49.99

Get in-depth coverage of Web application platforms and their vulnerabilities, presented the same popular format as the international bestseller, Hacking Exposed. Covering hacking scenarios across diff......一起来看看 《Web Applications (Hacking Exposed)》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具