内容简介:在上一篇教程中,学院君介绍了如何在 Github 中集成 CircleCI 实现 Laravel 项目的持续集成,今天,我们基于介绍如何在 Github 中集成 TravisCI 实现 Laravel 项目的持续集成(构建、测试流程自动化),相较于 CircleCI,Travis CI 与 Github 集成更加友好,并且针对开源项目,Travis CI 完全免费,所以推荐在开源项目中使用 Travis CI 做持续集成。如果你还没有在 Github 中为项目创建仓库,请参考上篇教程示例为待办任务项目创建一
在上一篇教程中,学院君介绍了如何在 Github 中集成 CircleCI 实现 Laravel 项目的持续集成,今天,我们基于介绍如何在 Github 中集成 TravisCI 实现 Laravel 项目的持续集成(构建、测试流程自动化),相较于 CircleCI,Travis CI 与 Github 集成更加友好,并且针对开源项目,Travis CI 完全免费,所以推荐在开源项目中使用 Travis CI 做持续集成。
创建 Github 代码仓库
如果你还没有在 Github 中为项目创建仓库,请参考上篇教程示例为待办任务项目创建一个代码仓库,如果已经创建,则可以跳过此步骤。
集成 TravisCI 到 Github 项目
创建好代码仓库后,接下来,我们要把 Travis CI 集成到 Github 项目中,以便 push 代码到仓库时,可以执行相应的持续集成脚本。
我们在 Github Marketplace 的 Continuous integration 类目 可以快速定位到 Travis CI 应用:
点击上述截图中的红色区域,进入 Travis CI 应用详情页,可以看到该应用开箱支持 PHP 语言,点击「Set up a free trial」,进入订阅计划选择区域:
在订阅计划选择区域中,选择开源项目选项:
然后点击绿色的「Install it for free」按钮开始安装,和 CircleCI 类似,安装之前有一个订单确认页面,点击绿色确认按钮确认即可:
然后,我们需要在安装界面选择要集成 Travis CI 的代码仓库,或者你也可以一次性选择所有仓库,这里我们选择待办任务项目对应的 todoapp
代码仓库:
点击「Install」按钮正式开始安装,然后页面会跳转到 Travis CI 网站 ,需要我们授权绑定 Github 账户到 Travis CI,以便打通 Github 代码仓库与 Travis CI 项目之间的关联:
授权成功后,就会跳转到如下欢迎页面:
点击头像下拉菜单中的「Settings」链接,即可进入与 Github 关联的仓库和设置页面,你可以点击右面右下角的「Settings」按钮,查看该项目的构建页面:
由于我们还没有提交代码,也没有为项目编写 Travis CI 配置文件,所以当前构建记录为空:
回到该项目的 Github 页面,在「Settings->Integrations & services」页面中即可看到与该项目关联的 Travis CI 应用,这一点和 CircleCI 不同,CircleCI 与 Github 仓库关联配置位于 Webhooks 菜单中:
点击「Configure」按钮可以对关联信息进行修改,主要是修改 Travis CI 关联的 Github 仓库,这里不需要做调整。
至此,我们已经完成了 Travis CI 与 Github 代码仓库的关联,接下来,我们需要为项目编写 Travis CI 能够识别的配置文件并提交到仓库,以便 Travis CI 能够根据该配置文件进行自动构建和测试工作,从而实现持续集成。
编写 TravisCI 配置文件
和 CircleCI 一样,Travis CI也支持 YAML 配置文件,在编写 Travis CI 配置文件之前,我们先来简单看下 Travis CI 进行持续集成的底层原理。
Travis CI 底层执行原理
Travis CI 根据项目根目录下的 .travis.yml
配置文件对测试环境进行初始化,然后按照配置文件中会定义的构建、测试、部署流程对项目进行构建、测试及部署。
和 CircleCI 不太一样,Travis 会为每种不同语言提供默认集成环境,然后根据每个项目自定义的 Travis 配置文件来创建虚拟机,将代码仓库克隆进去,再根据可选插件和服务对环境进行初始化,以及后续构建、测试或部署操作。
对于 Travis CI 默认的虚拟机设置我们不用关心,只需围绕项目本身对配置文件 .travis.yml
进行自定义编排即可,下面我们就来创建并编辑这个文件。
编写 .travis.yml
配置文件
在项目根目录下创建 Travis CI 可以识别的 .travis.yml
配置文件:
touch .travis.yml
然后编辑 .travis.yml
文件内容如下:
language: php php: - 7.3 services: - mysql addons: chrome: stable install: - mv .env.testing .env - mysql -e 'create database todoapp;' - composer self-update - composer install --no-interaction --prefer-dist --no-suggest - npm install - npm run production - php artisan key:generate - php artisan migrate - php artisan passport:install before_script: - google-chrome-stable --headless --disable-gpu --remote-debugging-port=9222 http://localhost & - php artisan serve & script: - vendor/bin/phpunit - php artisan dusk
下面我们简单看下这个配置文件都做了哪些工作:
- 首先,指定项目对应的编程语言和版本,这里是 PHP 7.3;
- 由于待办任务项目需要用到数据库,所以这里我们通过
services
指定要启动mysql
服务; - 对于基于 Dusk 的浏览器测试来说,需要 Chrome 浏览器,这里我们通过
addons
来指定; - 然后就是项目初始化需要进行的一些操作:Laravel 环境配置文件(沿用上篇教程的环境配置)、创建
todoapp
数据库、通过 Composer 安装项目的 PHP 依赖、通过 NPM 安装项目的前端依赖、生成应用密钥、执行数据库迁移命令、初始化 Passport,这些工作和 CircleCI 配置文件定义的一模一样,只是配置方式不同而已; - 在执行最终测试脚本之前,我们还要启动 Chrome 浏览器以及通过
php artisan serve
启动内置的 PHP Web 服务器以便可以执行 HTTP 测试和浏览器测试; - 最后是通过
script
配置的测试脚本,这里,我们定义了两个脚本,分别是基于phpunit
进行 HTTP 功能测试和基于dusk
进行浏览器测试(和上篇介绍 CircleCI 时一样,如果你想要将测试通过的代码自动部署到线上,可以参考 将博客应用自动部署到线上服务器完整流程详解 这篇教程基于 Envoy 编写相应的自动部署脚本)。
提交代码到仓库触发 Travis CI 进行构建测试
.travis.yml
配置文件编写好了之后就可以提交代码更改并将其推送到 Github 仓库:
git add . git commit -m 'add travis ci config' git push
执行完上述代码后,即可查看 Github 代码提交记录,可以看到提交信息中有个黄色的小圆点,代表与该项目关联的持续集成系统在根据此次代码推送进行构建、测试,由于我们将该项目关联到了两个持续交付系统,所以可以看到 Github 会通知这两个系统同时对此次推送进行检查(当然,正常情况下只需要配置一个关联的 CI 系统即可,因为它们所做的工作是一样的):
有关CircleCI 的构建我们上篇教程已经详细介绍过了,这里我们重点关注下 Travis CI,点击其右侧的「Details」链接即可进入 Travis CI 针对此次代码提交的构建页面,该页面被集成到 Github 网站:
我们可以点击上图中的红色区域链接到 Travis CI 网站查看针对此次提交详细的构建测试过程,如果你的项目的 Laravel 框架版本高于或等于 5.4,则在构建过程中会报错:
通过下拉 Job log
日志列表可以看到报错信息如下:
PDOException: SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
这是因为 Laravel 5.4 之后数据库默认字符集调整为了 utf8mb4
以支持 emoji 表情,针对此更改,如果 MySQL 版本低于 5.7.7,则运行数据库迁移命令时会报错,为了修复此问题,可以在 Travis CI 配置文件中指定使用更高版本的 MySQL(默认是 MySQL 5.6),我们在 addons
中指定 mysql
的版本及对应的 APT 安装包:
addons: chrome: stable apt: sources: - mysql-5.7-trusty packages: - mysql-server - mysql-client dist: trusty sudo: required
再次提交代码修改并将其推送到 Github 仓库,这一次,Travis CI 就会构建成功并在 Job log
日志中显示测试通过:
代码构建测试通过后,就可以将其合并到主干了。当然在大型公司和系统中,由于涉及到的系统功能模块多、开发人员多,不同团队之间的开发往往都是并行的,这个流程往往也更加复杂,一般会将仓库代码分为开发分支、发布分支、主干分支等多个不同种类的分支,开发分支开发、评审、测试通过后会合并到发布分支,一个发布分支往往包含多个开发分支,然后在固定时间节点统一上线,发布分支上线后才会合并到主干,然后每次开发新功能都是从主干检出新分支,以保证开发分支始终都是最新的、经过测试验证的代码。
当然要系统展开的话,这里就涉及到 Git 工作流的概念,不过学院君本篇重点介绍的是 Travis CI 本身,所以就不深入讨论了。这里给出的示例都是基于小型系统的、或者自己的开源项目,希望可以起到抛砖引玉的作用,至于如何整合到自己公司现有的持续集成系统中,需要你们自己去思考和尝试,有什么问题欢迎与我交流。其实,从开发分支的检出、到代码语法风格的检查、代码测试、Code Review、合并到发布分支、部署到预发环境、部署到线上环境、以及最终合并到主干所有这一整套 DevOps 流程都可以通过 API、开源 工具 实现自动化。
好了,关于基于 Github 和 Travis CI 进行 Laravel 项目的持续集成就简单介绍到这里,下一篇,我们将基于 Coding + Jenkins 演示如何对 Laravel 项目进行持续集成。
以上所述就是小编给大家介绍的《[ Laravel从入门到精通 ] 测试系列 —— 基于 Github + Travis CI 实现 Laravel 项目的持续集成》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- MyBatis从入门到精通(一):MyBatis入门
- MyBatis从入门到精通(一):MyBatis入门
- Charles 从入门到精通
- MAT 入门到精通(一)
- Git 从入门到精通
- Webpack入门到精通(1)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
基于内容图像检索技术
周明全 / 清华大学 / 2007-12 / 28.00元
《基于内容图像检索技术》从理论方法研究与实现技术角度,总结归纳了基于内容图像检索(CBIR)技术的研究与进展,并融入了作者多年来的相关研究与应用成果,系统地介绍了CBIR的主要概念、基本原理、典型方法、实用范例以及新动向。《基于内容图像检索技术》共有12章分为五部分:第一部分是概述,分析了CBIR的体系结构、技术现状和发展趋势;第一部分讨论图像特征提取,给出图像低层特征(颜色、形状、纹理、空间关系......一起来看看 《基于内容图像检索技术》 这本书的介绍吧!