如何在不编辑文件的情况下将 passenv 添加到 tox.ini,而是通过 virtualenv 中的 运行 tox shell 代理后面 Jenkins 中的自然脚本(python)

How to add passenv to tox.ini without editing the file but by running tox in virtualenv shell nature script in Jenkins behind proxy (python)

我正在尝试 运行 python 使用 tox 的 virtualenv 在 jenkins 中进行单元测试。我在代理后面,所以我需要将 HTTP_PROXYHTTPS_PROXY 传递给 tox,否则它在下载东西时会出现问题。

我发现我可以编辑 tox.ini 并在 [testenv] 下添加 passenv=HTTP_PROXY HTTPS_PROXY,而不是使用 Create/Update 文本文件插件我可以覆盖 tox.ini(作为构建步骤)每当 Jenkins 作业从存储库中获取原始文件时。这样我就可以从工作区手动复制 tox.ini 的内容,在 [testenv] 下面添加 passenv= 行并使用上面提到的插件更新文件。但这不是正确的解决方案。我不想以这种方式编辑 tox.ini 文件,因为该文件会不断更新。使用此解决方案将迫使我每次在 git 存储库上更改时更新插件中的 tox.ini 内容,并且我希望 运行 单元测试的过程完全自动化。不,我无法编辑 git 存储库中的原始文件。

那么有什么方法可以在 Shell nature 命令中传递 passenv = HTTP_PROXY HTTPS_PROXY 吗?这就是我在 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}' help...

我想到了解决方法:

在 Jenkins 作业中创建一个构建步骤,它将执行 bash 脚本,这将打开 tox.ini 查找行 [testenv] 并在 passenv = HTTP_PROXY HTTPS_PROXY 下面输入一行。那将解决问题。我现在正在研究这个,但无论如何,如果你们知道更好的解决方案,请告诉我。干杯

好的,这就是解决方案:

  1. 添加构建步骤执行shell

  2. 输入:sed -i.bak '/\[testenv\]/a passenv = HTTP_PROXY HTTPS_PROXY' tox.ini 这将更新 tox.ini 文件(在 [testenv] 下输入所需的 passenv 行并保存更改)。并用sed改变前的原始数据创建一个tox.ini.bak备份文件。