使用 GitLab-CI 自动化 Node.js 项目测试
很久前就更新了新版本的 GitLab,新版本一早就支持了 CI/CD 的功能,之前也部署过 GitLab 的 Runner,但是没有真正的用起来,最近就想把新的项目的 CI 与 CD 功能一起做起来,先从 Node.js 的项目开始,接下来一步步来吧。
开启 Pipelines
Gitlab CI Runner 的创建和配置就不多说了,网上的教程很多,接下来的文章就假定你已经有了一个使用 Docker 的 Runner。为什么使用 Docker 的 Runner ?因为这样可以兼容各种运行的环境,同时可以链接其他服务(例如:MySQL、MongoDB、Redis…)。
如果你已经有 Share 的 Runner 同时项目默认也开启了 Builds 的功能,那么在项目主页应该可以看到 Pipelines 的选项,没有开启的话,可以在 Edit Project 的 Feature Visibility 中设置 Builds 为 Only team members (如下图)。
最简单的测试
开启后,就是简单的问题了,你的 Node.js 项目一般都有 test (没有测试做个毛线 CI )。在项目的根目录下添加 ` .gitlab-ci.yml` 文件。内容如下:
image: node:6
before_script:
- npm install
test:
script:
- npm test
最简单的测试就完成,commit 并且 push 之后,就能看到 Pipelines 的 Builds 中出现了在 running 的项目,如果测试没问题,那么状态就会变成 passed 。
链接外部服务
在项目重要用到外部服务(如:Redis、MongoDB)也很简单,通过 services 字段添加需要依赖服务的 Docker 镜像就可以了,如下:
services:
- mongo:3.2
- redis:3-alpine
在代码内就可以通过 hostname: redis 跟 mongo 访问到 Redis 和 MongoDB 的服务(端口为默认端口号)
加快速度
未来加快 npm 的安装速度,使用淘宝的镜像,把 before_script 的 npm install 改为 npm install --registry=https://registry.npm.taobao.org 。
同时可以缓存安装后的 node_modules ,通过添加 cache 字段:
cache:
paths:
- node_modules/
这样在 build 成功的情况下,就能看到 Created cache ,下次运行就不需要安装那么多模块了。
添加代码测试覆盖度
Node.js 可以通过添加 istanbul 模块,为现有项目添加 coverage 功能,不需要改动原有的测试,只需要安装 istanbul 模块:
npm install istanbul --save-dev
然后把原来的 mocha 改成 ./node_modules/.bin/istanbul cover _mocha 就可以了。
接下来只要修改 CI/CD Pipelines 中的 Test coverage parsing 的内容为 ^Statements\s+:\s(\d+(?:\.\d+)?%) 就可以让 GitLab 自动获取到代码测试覆盖度的情况。如下图:
下方有获取对应分支 status 的代码。
总结
最终的 ` .gitlab-ci.yml` 如下:
image: node:6
cache:
paths:
- node_modules/
services:
- mongo:3.2
- redis:3-alpine
before_script:
- npm install --registry=https://registry.npm.taobao.org
test:
script:
- ./node_modules/.bin/istanbul cover _mocha
在 README 中加入相关的 status 后如下图:
还有其他的问题欢迎大家一起讨论。
原文链接:https://blog.yourtion.com/use-gitlab-ci-for-nodejs-project.html
