tl;dr:
我正在为我的一个项目建立CI,该项目托管在github上,使用tox和travis-ci。在构建结束时,我运行converalls将覆盖报告推送到coveralls.io。我想使这个命令‘有条件’-只在测试在travis上运行时执行,而不是在我的本地机器上运行时。有什么办法让这事发生吗?
详情如下:
我正在尝试测试的包是python包。我正在使用/计划使用以下“基础设施”来设置测试:
py.test的变种。tox的。这样我就可以在本地运行测试,这对我来说非常重要。每次我需要测试运行时,我都不想推到github。我还在包中使用了numpy和matplotlib,所以在travis-ci上运行不合理的测试周期对我来说似乎太浪费了。因此,放弃tox而仅仅使用.travis.yml并不是一种选择。travis-ci。相关的测试脚本如下所示:
.travis.yml
language: python
python: 2.7
env:
- TOX_ENV=py27
install:
- pip install tox
script:
- tox -e $TOX_ENVtox.ini
[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发布于 2016-11-25 11:04:10
另一种解决方案是在coveralls命令前面加上一个破折号(-),告诉tox忽略它的退出代码,就像解释的在文件中一样。这样,即使是来自coveralls的失败也将被忽略,tox将认为在本地执行时测试执行是成功的。
使用上面的示例配置,如下所示:
[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发布于 2018-02-19 17:04:15
我使用一个环境变量来运行其他命令。
tox.ini
commands =
coverage run runtests.py
{env:POST_COMMAND:python --version}.travis.yml
language: python
python:
- "3.6"
install: pip install tox-travis
script: tox
env:
- POST_COMMAND=codecov -e TOX_ENV现在,在我的本地设置中,它打印python版本。从特拉维斯跑的时候它运行codecov。
发布于 2020-02-26 21:38:19
如果您使用Makefile而不需要一个新的py文件,则可以选择其他解决方案:
define COVERALL_PYSCRIPT
import os
from subprocess import call
if __name__ == '__main__':
if 'TRAVIS' in os.environ:
rc = call('coveralls')
raise SystemExit(rc)
print("Not in Travis CI, skipping coveralls")
endef
export COVERALL_PYSCRIPT
coveralls: ## runs coveralls if TRAVIS in env
@python -c "$$COVERALL_PYSCRIPT"在tox.ini中将make coveralls添加到commands
https://stackoverflow.com/questions/32757765
复制相似问题