tl;博士:
我正在为我的一个项目设置 CI,托管在 github 上,使用tox
和travis-ci
. 在构建结束时,我运行converalls
将覆盖率报告推送到coveralls.io
. 我想让这个命令“有条件”——仅在 travis 上运行测试时执行;不是当它们在我的本地机器上运行时。有没有办法做到这一点?
细节:
我要测试的包是一个 python 包。我正在使用/计划使用以下“基础设施”来设置测试:
- 测试本身是
py.test
多种多样的。 - 可以说,CI 脚本来自
tox
. 这让我可以在本地运行测试,这对我来说相当重要。我不想每次需要测试运行时都推送到 github。我也在我的包中使用numpy
和matplotlib
,所以运行大量的测试周期对travis-ci
我来说似乎过于浪费。因此,放弃tox
并简单地.travis.yml
单独使用不是一种选择。 - CI服务器是
travis-ci
相关的测试脚本如下所示:
.travis.yml
language: python
python: 2.7
env:
- TOX_ENV=py27
install:
- pip install tox
script:
- tox -e $TOX_ENV
毒物
[tox]
envlist = py27
[testenv]
passenv = TRAVIS TRAVIS_JOB_ID TRAVIS_BRANCH
deps =
pytest
coverage
pytest-cov
coveralls
commands =
py.test --cov={envsitepackagesdir}/mypackage --cov-report=term --basetemp={envtmpdir}
coveralls
这个文件让我在本地运行测试。但是,由于最终coveralls
调用,测试原则上失败,其中:
py27 runtests: commands[1] | coveralls
You have to provide either repo_token in .coveralls.yml, or launch via Travis
ERROR: InvocationError: ...coveralls'
这是预期的错误。该passenv
位发送必要的信息,travis
以便能够写入coveralls
,并且没有 travis 提供此信息,命令应该失败。我也不希望这将结果推送到 coveralls.io。我coveralls
只想在测试发生在travis-ci
. 有什么方法可以让这个命令有条件地运行,或者设置一个构建配置来达到同样的效果?
我已经尝试将工作服部分移入.travis.yml
,但执行时coveralls
似乎无法找到.coverage
要发送的适当文件。coveralls.io
我在这个方向上做了各种尝试,除了上面列出的组合之外,没有一个成功提交。以下是我希望的工作,因为当我在tox
本地运行时,我最终会得到一个.coverage
我期望的文件 - 在我的源代码树的根文件夹中。
没有提交到coveralls.io
language: python
python: 2.7
env:
- TOX_ENV=py27
install:
- pip install tox
- pip install python-coveralls
script:
- tox -e $TOX_ENV
after_success:
- coveralls