如何在Jenkins环境中运行不同的tox命令?

时间:2016-05-19 14:12:53

标签: python jenkins tox

我想为py.test使用不同的命令行参数,具体取决于环境:在本地运行应该只有默认值,但在Jenkins上我想添加--junitxml=junit-{envname}.xml,所以测试结果可能是以漂亮的格式发布。 我从documentation了解到,有[tox:jenkins]部分,should be used部分,如果已定义'JENKINS_URL''HUDSON_URL'。所以现在我创建了简单的tox.ini文件:

[tox]
envlist = py27, py35

[tox:jenkins]
commands = echo "We are in JENKINS!"

[testenv]
setenv =
    PYTHONPATH = {toxinidir}:{toxinidir}/my_module
commands = python setup.py test

deps =
    -r{toxinidir}/requirements.txt
    -r{toxinidir}/requirements_test.txt

并定义了JENKINS_URL环境变量:

export JENKINS_URL=true

我希望,如果我运行tox,那么我的原始命令将被echo替换,但是它不起作用,而是以最初的命令执行结束。 有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

好的,我自己找到了解决方案:

[tox]
envlist = py27, py35

[testenv]
setenv =
    PYTHONPATH = {toxinidir}:{toxinidir}/my_module
commands = py.test {env:CUSTOM_ARGS} ; <== use environment variable here

deps =
    -r{toxinidir}/requirements.txt
    -r{toxinidir}/requirements_test.txt

并且在Jenkins中只需定义CUSTOM_ARGS环境变量,如下所示:

export CUSTOM_ARGS="--junitxml=junit.xml"

答案 1 :(得分:0)

您可以使用positional arguments

像这样:

commands = py.test --mandatory-flag {posargs:--default-flag}

在詹金斯你可以这样打电话给托克斯:

tox -- --override-flag

请注意两个短划线--的分隔。