跟踪 Github 项目的持续集成状态
不知从什么时候开始,Github项目的README
中到处都能看到绿色的小徽章。
通过这些徽章可以获知项目的最新版本号、构建状态、测试覆盖率,
以及依赖软件包的过期情况。请看这个Brick.JS项目的首页:
项目标题Brick.JS下是一排徽章,它们分别表示着: 该项目在npm的最新版本是2.0.2,构建和测试状态是通过(还可能是failing), 测试程序的覆盖率为92%,该项目的依赖软件包都处于最新状态。 每次Push一些提交到Github仓库,测试和构建都会自动执行,这些徽章都会更新。
这些是怎么做到的呢?本文便来详述这些依托于Github的持续集成工具。 就以上图的项目为例。
NPM Version
多数Github上的JavaScript都会在NPM上发布对应的软件包来方便使用。 先上代码!在README.md中是这样写的:
[![NPM version](https://img.shields.io/npm/v/brick.js.svg?style=flat)](https://www.npmjs.org/package/brick.js)
首先最外层是一个超链接,链接到该项目的NPM地址:https://www.npmjs.org/package/brick.js
内层是一个图片,图片源为:https://img.shields.io/npm/v/brick.js.svg?style=flat。 很显然该图片是Shields.IO提供的,其实它的功能远远不止于此,请看: http://shields.io/,还包括下载统计、Issue统计、社会化、License、技术债务等等。
Travis CI
[![Build Status](https://travis-ci.org/brick-js/brick.js.svg?branch=master)](https://travis-ci.org/brick-js/brick.js)
构建状态徽章是由Travis CI提供的:
Travis CI是一个在线的分布式持续集成服务,用来构建及测试在GitHub托管的代码。 这个软件的代码同时也是开源的,可以在GitHub上下载到。 – Wikipedia
直接使用这个图标会显示build:unknown
,需要去travis.ci开通服务。
打开https://travis-ci.org/,允许Github仓库的访问权限即可。
此后每次Push到Github,Travis都会自动运行构建,构建结果会发送到你的邮箱。
Travis CI需要一点配置,请参考:https://docs.travis-ci.com/user/getting-started/。
这是我的配置文件(Github仓库根目录下的.travis.yml
):
language: node_js
node_js:
- "4"
before_script:
- npm install -g mocha
下图是一次构建过程,可访问https://travis-ci.org/brick-js/brick.js来查看:
小技巧
Github会对这些图标进行缓存这会导致这些徽章显示不正确,
可以改变一下URL使缓存失效,但同时不影响图片获取。
比如在?branch=master
后面再加一个无用的参数?branch=master&foo=bar
。
Coveralls
[![Coverage Status](https://coveralls.io/repos/github/brick-js/brick.js/badge.svg?branch=master)](https://coveralls.io/github/brick-js/brick.js?branch=master)
Coveralls是测试覆盖工具,为代码质量提供信心! 它会计算测试覆盖率,包括语句覆盖率、行覆盖率、分支条件覆盖率、函数覆盖率等。 开源仓库是免费的!
和Travis CI一样需要去开通服务:https://coveralls.io/。
但Coveralls不会直接运行你的测试,需要你在测试完成后进行测试覆盖计算,
然后报告给Coveralls,别担心有工具!
如果你也是用mocha
测试的,那么请按照下列流程:
- 安装
coveralls
和istanbul
:npm install --save-dev coveralls istanbul
-
配置Travis CI:将测试覆盖报告给Coveralls
language: node_js node_js: - "4" after_script: - NODE_ENV=test ./node_modules/.bin/istanbul cover ./node_modules/mocha/bin/_mocha --report lcovonly -- -R spec && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage
这是Coveralls的一次测试覆盖统计,可访问https://coveralls.io/github/brick-js/brick.js?branch=master来查看:
David DM
NPM包往往会依赖于其他很多的包,当它们的维护状态发生改变时我们应当及时更新。 忽略这一点往往会造成技术债务,毕竟新版本已经发布了而你还在写老代码。
David DM提供了一个依赖管理徽章,可以把它放在项目README中时时提醒自己。 不需开通任何服务,David DM会直接去NPM下载并分析你的NPM包。
这是David DM对Brick.JS 2.0.2的依赖分析,可访问https://david-dm.org/brick-js/brick.js来查看:
本文采用 知识共享署名 4.0 国际许可协议(CC-BY 4.0)进行许可,转载注明来源即可: https://harttle.land/2016/04/30/github-ci.html。如有疏漏、谬误、侵权请通过评论或 邮件 指出。