我正在尝试使用 tox
在 jenkins 中运行 python 单元测试的虚拟环境。我在代理后面,所以我需要通过 HTTP_PROXY
和HTTPS_PROXY
tox,否则下载内容时会出现问题。
我发现我可以编辑tox.ini
并添加passenv=HTTP_PROXY HTTPS_PROXY
下[testenv]
,并且与使用创建/更新文本文件插件相比,每当 Jenkins 作业从存储库获取原始文件时,我都可以覆盖 tox.ini(作为构建步骤)。这样我就可以从工作区手动复制 tox.ini 的内容,添加 passenv=
下面一行 [testenv]
并使用上面提到的插件更新文件。但这不是正确的解决方案。我不想以这种方式编辑 tox.ini 文件,因为该文件会不断更新。使用此解决方案将迫使我在每次 git 存储库上发生更改时更新插件内的 tox.ini 内容,并且我希望运行单元测试的过程完全自动化。不,我无法编辑 git 存储库上的原始文件。
有什么办法可以让我通过 passenv = HTTP_PROXY HTTPS_PROXY
在 Shell nature 命令中?这是我在 Virtualenv Builder 中的命令的样子:
pip install -r requirements.txt -r test-requirements.txt
pip install tox
tox --skip-missing-interpreter module/tests/
我想做这样的事情:
tox --skip-missing-interpreter --[testenv]passenv=HTTP_PROXY HTTPS_PROXY module/tests
如何解决这个问题?
注意:
我认为使用 {posargs} 可能有一个解决方案,但我看到原始 tox.ini 中已经有一行包含该 posargs: python setup.py testr --testr-args='{posargs}'
帮助...
最佳答案
我想到了一个解决方法:
在 Jenkins 作业中创建一个构建步骤,该步骤将执行 bash 脚本,这将打开 tox.ini
查找行 [testenv]
并在下面输入一行 passenv = HTTP_PROXY HTTPS_PROXY
。这样就解决了问题。我现在正在研究这个问题,但无论如何,如果你们知道更好的解决方案,请告诉我。干杯
好的,这就是解决方案:
添加构建步骤执行 shell
输入:
sed -i.bak '/\[testenv\]/a passenv = HTTP_PROXY HTTPS_PROXY' tox.ini
这将更新 tox.ini 文件(输入所需的passenv 行位于 [testenv] 下并保存更改)。并用sed更改前的原始数据创建一个tox.ini.bak备份文件。
关于python - 如何将 passenv 添加到 tox.ini 而不编辑文件,而是通过在代理后面的 Jenkins 中的 virtualenv shell nature 脚本中运行 tox (python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41259308/