4

我正在使用 Jenkins 来测试nodepy我开发的 Python 模块。但是,我收到如下错误:

File "/var/lib/jenkins/jobs/NodePy/workspace/convergence.py", line 6, in workspace.convergence
Failed example:
    from nodepy import rk, convergence, ivp
Exception raised:
    Traceback (most recent call last):
      File "/usr/lib/python2.7/doctest.py", line 1289, in __run
        compileflags, 1) in test.globs
      File "<doctest workspace.convergence[0]>", line 1, in <module>
        from nodepy import rk, convergence, ivp
    ImportError: No module named nodepy

如何在 Jenkins 中设置 PYTHONPATH(以便我的模块可导入)?

我什至不确定应该添加哪个目录。似乎 Jenkins 把东西放在了 jenkins/jobs/nodepy/workspace/ 中,所以该目录甚至没有正确的名称供 python 找到它。

编辑:

python 模块nodepy是一个git存储库,我已将我的 jenkins 作业配置为观看和签出。

4

4 回答 4

10
  • 将其添加到您的参数化作业参数列表中(并填写或提供默认值)
  • 或者,如果您对 jenkins 具有管理员访问权限,则可以将其添加到那里的系统变量中(转到Manage Jenkins,然后System Configuration
  • sys.path.append在您的脚本中使用。

例如

import sys
import os
# jenkins exposes the workspace directory through env.
sys.path.append(os.environ['WORKSPACE'])
import nodepy

或者,在您的 jenkins 构建配置中,配置构建步骤(如果它是一个 shell 脚本):

export PYTHONPATH=$WORKSPACE:$PYTHONPATH

包裹问题

/var/lib/jenkins/jobs/NodePy/workspace/convergence.py

这是一个问题,因为没有nodepy目录。所以即使你放置了正确的系统路径,你的包结构也不会是正确的。你可以做的是改变你的工作空间的样子,从:

/var/lib/jenkins/jobs/NodePy/workspace/convergence.py
/var/lib/jenkins/jobs/NodePy/workspace/ivp.py
/var/lib/jenkins/jobs/NodePy/workspace/rk.py

/var/lib/jenkins/jobs/NodePy/workspace/nodepy/__init__.py
/var/lib/jenkins/jobs/NodePy/workspace/nodepy/convergence.py
/var/lib/jenkins/jobs/NodePy/workspace/nodepy/ivp.py
/var/lib/jenkins/jobs/NodePy/workspace/nodepy/rk.py

编辑:在正确的子目录中提取文件

你的工作空间将是

/var/lib/jenkins/jobs/NodePy/workspace/

您无需更改工作区目录,它由您的作业名称 ( NodePy) 和您的 jenkins 配置键入,您只需nodepy工作区中创建目录,并将您的文件放在那里。您可以更改您的 jenkins 作业配置并让它在正确的子目录中签出repo ,或者您可以自己移动文件:gitnodepy

mkdir .nodepy
# .nodepy is hidden, * doesn't capture hidden files.
mv * .nodepy
mv .nodepy nodepy
于 2012-10-21T08:07:11.767 回答
1

在python3安装过程中,确保安装适用于所有用户

自定义安装 -> 下一步 -> 为所有用户安装

于 2021-01-27T06:52:29.927 回答
0

您应该安装nodepy作为测试过程的一部分。Jenkins 和其他测试驱动的开发工具需要能够在您安装的代码发生变化时更新它(以及验证您的安装过程是否正常工作),正确的方法是使用.pth链接或安装它结帐后。如果您只想使用从 github 签出的存储库,您可以从workspace目录中插入以下 shell 命令:

pip install -e ./nodepy
于 2012-10-21T21:05:17.800 回答
0

事实证明,我需要做的就是按照这个问题的答案让 Jenkins 将我的 repo 克隆到一个子目录workspace/nodepy/中。由于 Jenkins 在 中运行构建workspace,因此它会找到该包。

当我第一次这样做时,它以某种方式创建了 nodepy/nodepy/nodepy/... 目录的无限递归。清理完工作区后,这个问题就消失了。

于 2012-10-22T13:59:47.807 回答