为Git库设置持续集成做自动化测试(TravisCI + Github)

CI - Continuous Integration 也就是持续集成。关于持续即成的概念可参考其他大神的日志:http://www.ruanyifeng.com/blog/2015/09/continuous-integration.html。

随着近年Devops的盛行,市面上CI服务提供商也非常多。比如在这篇文章:https://stackify.com/top-continuous-integration-tools/ 里就提到了50个,令人眼花缭乱。目前我遇到的私人项目用Jenkins居多,公开项目用TravisCI的不少,这东西我并不在行,也就不做过多评价了。

其实本质上CI提供了一个独立的运行环境,可以根据配置文件按步运行一套指令,就好像你给一个无GUI的虚拟机(一般是Linux,也有macos的)下达了一系列工作指令,而这个运行结果对你是个可见的。这些工作指令除却提供商定义的一些像环境选项(比如node版本),运行步骤(可以分割成多个运行和测试环境)之类,剩下的就是各种被CI支持的bash命令了。

对Git来说,这一套指令的触发时机便是一个branch上的history发生改变的时候,如做push或merge操作之后,这也可以在CI服务平台上进行设置。

如阮一峰大神所说,用持续集成可以在代码提交的时候及时发现一些代码层面的错误。比如:用ESlint/JSHint验证代码格式,自动化测试,计算测试覆盖率,Flow/Typescript数据类型检查。

对于一个开源或私人小项目,直接使用免费CI托管服务再合适不过了。拿TravisCI + Github来说:

1. 用Github账号登陆:

为Git库设置持续集成做自动化测试(TravisCI + Github)_第1张图片

登陆成功可以看到如下界面(没有已设置的repo会有一些设置的介绍):
为Git库设置持续集成做自动化测试(TravisCI + Github)_第2张图片
2. 按左侧“+“号添加新的库

因为我直接用github登陆,在登录时给了读取repo的权限,所以它会显示我的所有GitHub库列表:

为Git库设置持续集成做自动化测试(TravisCI + Github)_第3张图片

然后打开开关就能进入设置界面了。

为Git库设置持续集成做自动化测试(TravisCI + Github)_第4张图片

3. 这个时候你还是没有任何job的,新的提交才能触发。但在此之前,你需要给你的repo根目录加一个 .travis.yml.

---
language: node_js
node_js:
  - '8'
  - node

script:
  - yarn test

根据官方文档:https://docs.travis-ci.com/user/languages/javascript-with-nodejs/, 对于基于NodeJS的Javascript项目,,travis.yml首先要指定语言为node_js

language: node_js

然后指定NodeJS的版本。

node_js:
  - '8'
  - node

这里写node则代表最新稳定版本。另外还支持如:iojs最新稳定版io.js,lts/*最新LTS版NodeJS。

如果提供了多个版本,在实际运行中,会成为多个互不相干的job。即在不同版本下这块所有指令重新跑一遍。

TravisCI现在默认支持Yarn,如果有yarn.lock文件存在,会自动会在它的install步骤运行yarn install。不用自己手动加。但如果需要添加一些额外的命令,则需要自己定义:

install:
  - yarn install
  - yarn add global codecov

而script块的命令会在install之后进行。所以,这个YAML文件让TravisCI做的事情特别简单,即等于:

$ yarn install
$ yarn test

test是我在package.json中自定义的命令:

{
  "name": "package-name",
  ...,
  "scripts": {
    "test": "jest"
  },
  "devDependencies": {
    "jest": "^23.3.0"
  }
}

4. 将这个有.travis.yml文件的改动提交到github repo就可以看到Travis CI开始跑脚本拉~

点进job,就可以看到所有的运行结果,基本跟自己在Linux机上跑一样:
为Git库设置持续集成做自动化测试(TravisCI + Github)_第5张图片

这篇就到这里。更多应用:
- 手把手教你为Javascript/Node Github库设置测试覆盖率徽标(Coverage Badge)

你可能感兴趣的:(工具)