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


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

查看所有标签

猜你喜欢:

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

网络营销实战密码

网络营销实战密码

昝辉Zac / 电子工业出版社 / 2009.1 / 56.00元

本书是作者几年来网络营销实战的总结,与其他网络营销书籍最大不同之处是:只专注于实战,不谈理论。本书分三部分详细介绍了网络营销实用策略和技巧,并分析了大量实战案例。第一部分介绍市场与产品研究,包括用户、市场和竞争对手的调查;产品、目标市场的确定;价格策略;赢利模式等。第二部分讨论以网络营销为导向的网站设计,包括怎样在网站上卖东西、提高转化率,以及网站目标设定等。第三部分研究怎样给网站带来流量,详细讨......一起来看看 《网络营销实战密码》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具