接上文:

freeeyes – TarvisCI 全流程使用实践(二)

做到持续集成,光编译,代码静态检查还不够。

我们当然还离不开测试。

其实,如果不是框架级别的服务器,github有很多代码覆盖率检查的标签。因为我写的是服务器,那么,代码覆盖率对我而言并不是特别重要。重要的是,我需要写一个测试客户端,连接我的服务器,发送各种数据包,并检查结果。

这里要说明的是,TarvisCI本身只是一个虚拟机。我们要生成了检测报告,怎么提供出来呢?因为毕竟编译完成后,这个虚拟机就销毁了。我的报告也会随之呜呼哀哉。这个我当然不能接受了,看网上有些人说,tarvisCI关于测试报告没有API接口的讨论,我觉得,既然都做到这一步了,能不能做到更完美呢?没有API也不能阻止我,怎么说来着,”自己动手,丰衣足食。”

那么,怎么动呢?

我的想法初步是,我在TarvisCI上启动我的服务器,然后编译一个测试客户端,去测试这个服务器。将生成的报告,存为一个html。然后把这个html回传到我的github上,这样,每次我自动编译的话,就可以在github上看到我的测试报告结果了。

这里有几个难点。

(1)github本身是需要账号登录的,还是那样,我不可能把我的github密码大摇大摆的写在我的tarvisCI测试脚本里,太危险了。

那么,我需要一种方式,让github通过公钥去授权tarvisCI,然后tarvisCI拿着公钥来提交代码,这样,就算我在脚本里写了公钥的明文,没有私钥一样无法使用,这样彻底解决了明文密码的问题,太COOL了,就这么办。

我找了一台linux服务器。

首先获得一个github的私钥。

curl -X POST -u freeeyes:XXXXXXXXX -d '{"note":"file upload script","scopes":["repo"]}' https://api.github.com/authorizations
{
"id": 154790700,
"url": "https://api.github.com/authorizations/XXXXXXXX",
"app": {
"name": "file upload script",
"url": "https://developer.github.com/v3/oauth_authorizations/",
"client_id": "00000000000000000000"
},
"token": "XXXXXXXXXXXXXXXXXXXXX",
"hashed_token": "XXXXXXXXXX",
"token_last_eight": "6364a0b9",
"note": "file upload script",
"note_url": null,
"created_at": "2018-01-03T03:12:50Z",
"updated_at": "2018-01-03T03:12:50Z",
"scopes": [
"repo"
],
"fingerprint": null
}

好了,在这里,拿到了我需要 TOKEN。

然后呢?我们需要给这个TOKEN授权一下。

在github的用户管理设置里,选择你的授权。一定要把写权限加上,因为测试报告,我要提交到github上回来的。没有写权限,tarvisCI执行会有权限问题。

然后找一台Linux,安装一下tarvisCI的客户端,没办法,我们要它的公钥。所以必须借助它的客户端生成。

travis encrypt -r iissnan/theme-next-docs GH_TOKEN=XXXXXX
Please add the following to your .travis.yml file:

secure: "XXXXXXXXXXXXXXXXXX"

好了,我们得到公钥了。

距离胜利又近了一步。

然后我开始写..travis.yml脚本

sudo: required
dist: trusty
language: cpp
os:
- linux

compiler:
- gcc

branches:
only:
- master

env:
global:
- GH_REF: github.com/freeeyes/TimeWheel.git
- secure: "XXXXXXX"

before_install:

before_script:
- make -j 4

after_script:
- echo $(pwd)
- echo "wwww" > ./test/aaa.txt
- echo $(ls -l)
- git init
- git config user.name "freeeyes"
- git config user.email "freeeyes@163.com"
- git add -u ./test/aaa.txt
- git commit -m "[ci skip]Update test"
- git push -f "https://${GH_TOKEN}@${GH_REF}" HEAD:master

这里剥离一个赶紧的给大家。

这里演示了,我在tarvisCI上模拟生成了一个文件。./test/aaa.txt 并把这个文件上传到github的指定目录下。

这里注意一下。

git commit -m “[ci skip]Update test”

这里一定要加[ci skip],告诉tarvisCI,不要再试图编译了,否则就是无限死循环。

GH_TOKEN是什么?请看我在第一章里面讲的tarvisCI隐秘环境变量设置方法。

好了,做到这些,代码报告就会在CI执行测试代码完成后,把我的测试报告上传到我的指定目录,实现完整的测试流程。我只要刷新这个目录,就可以看到我的所有提交测试结果了,

到此,TarvisCI 编译 + 检查 +测试 这个流程全流程走通了。

哦,对了,还有一个自动部署是吧。

这个,我暂时不用,貌似这个还是itarvisCI的pro用户才有的功能。貌似还是收费的,我目前还没有付费的打算,以后再说吧。

freeeyes - TarvisCI 全流程使用实践(二)