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账号登陆:
登陆成功可以看到如下界面(没有已设置的repo会有一些设置的介绍):
2. 按左侧“+“号添加新的库
因为我直接用github登陆,在登录时给了读取repo的权限,所以它会显示我的所有GitHub库列表:
然后打开开关就能进入设置界面了。
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机上跑一样:
这篇就到这里。更多应用:
- 手把手教你为Javascript/Node Github库设置测试覆盖率徽标(Coverage Badge)