GitHub 研发链 travis-ci 和 codecov 介绍 | yaozhen's blog

975 阅读3分钟
原文链接: iyaozhen.com

经常混迹于 GitHub 的话就会发现很多项目都有一些徽章,出现最多的就数这两个了:

这些徽章都是可以点击的,第一个点进去是 travis-ci.org/,travis-ci 是一个 CI(Continuous integration,持续集成) 平台,主要提供集群编译、单测、集成测试的环境。.org 的服务对公有仓库免费,.com 面向私人、团队、公司的项目提供商业支持(收费)。使用起来非常简单,使用 Github 帐号登录进去,就能看见开始界面:

核心就是.travis.yml的文件配置,一开始可以根据自己的语言选择初始的配置文件:docs.travis-ci.com/user/custom…。我这边的项目使用的是 Python,初始配置是:

language: python
python:
  - "2.6"
  - "2.7"
  - "3.2"
  - "3.3"
  - "3.4"
  # PyPy versions
  - "pypy"  # PyPy2 2.5.0
  - "pypy3" # Pypy3 2.4.0
  - "pypy-5.3.1"
# command to install dependencies
install:
  - pip install .
  - pip install -r requirements.txt
# command to run tests
script: pytest

官方注释可以说非常详细,我就不画蛇添足做说明了,根据自己代码实际情况做调整即可:

language: python
python:
  - "2.7"
# command to install dependencies
install:
  - pip install -r requirements.txt
# command to run tests
script:
  - nosetests -sv tests
  - nosetests -c demo/nose.cfg demo

配置好之后再 push 代码,就能在 travis-ci 页面上看见项目的构建、测试结果了:

点击图标就能生成我们需要的 MD 语法的代码了,粘贴进 README.MD 中就能显示了。

第二个徽章是 codecov.io(单测覆盖率统计平台),接入过程也很简单,也是不同语言选择不同的配置文件,codecov 可以无缝衔接 travis-ci,只需要在原来的配置文件上稍作修改即可,核心就是生成单测的结果文件。修改后的 .travis.yml

language: python
python:
  - "2.7"
# command to install dependencies
install:
  - pip install -r requirements.txt
  - pip install codecov
# command to run tests
script:
  - nosetests -sv --with-coverage --cover-tests --cover-package=py_http_api_test tests
  - nosetests -c demo/nose.cfg demo
after_success:
  - codecov

在原来的基础上多了 codecov nose 插件的下载和运行单测时多了--with-coverage等参数。最后还是再次 push 代码就能看见单测覆盖率报告了:

codecov 还有自己的配置文件:codecov.yml。用来实现一些定制化需求,比如说我需要排除一些模块,不进入覆盖率统计:

# https://docs.codecov.io/docs/ignoring-paths
ignore:
  - "tests/*"
  - "demo/*"
  - "py_http_api_test/http_test.py"

徽章生成代码的话在setting中可以找到:

除了上面介绍的这两个徽章,还可以通过 shields.io 平台生成一些其它的徽章,甚至可以自定义,比如 img.shields.io/badge/Pytho… 就可以生成一个表示 Python 版本的徽章,别人能看懂就行。

[![Support Python Version](https://img.shields.io/badge/Python-2.7-brightgreen.svg)](https://www.python.org/)

当然徽章不是重点,不是越多的越牛逼,重要的是规范整个研发流程。上面说的两个其实都是属于 CI(持续集成)中最具代表性的两个环节,算是入门了。关于 CI 是一个很大的话题了,这个有机会以后再说一下。

参考资料:

开源项目徽章集锦,segmentfault.com/a/119000000…