Jenkins:把我的Python模块放在PYTHONPATH上

Dav*_*son 4 python environment-variables jenkins

我正在使用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
Run Code Online (Sandbox Code Playgroud)

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

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

编辑:

python模块nodepy是一个git存储库,我已将jenkins作业配置为观察和结帐.

dno*_*zay 8

  • 将其添加到参数化作业参数列表中(并填写或提供默认值)
  • 或者如果你有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
Run Code Online (Sandbox Code Playgroud)

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

export PYTHONPATH=$WORKSPACE:$PYTHONPATH
Run Code Online (Sandbox Code Playgroud)

包裹问题

/var/lib/jenkins/jobs/NodePy/workspace/convergence.py
Run Code Online (Sandbox Code Playgroud)

这是一个问题,因为没有nodepy目录.所以即使你输入正确的syspath,你的包结构也不对.你可以做的是改变工作区的样子,来自:

/var/lib/jenkins/jobs/NodePy/workspace/convergence.py
/var/lib/jenkins/jobs/NodePy/workspace/ivp.py
/var/lib/jenkins/jobs/NodePy/workspace/rk.py
Run Code Online (Sandbox Code Playgroud)

/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
Run Code Online (Sandbox Code Playgroud)

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

你的工作空间将是

/var/lib/jenkins/jobs/NodePy/workspace/
Run Code Online (Sandbox Code Playgroud)

您不需要更改工作区目录,它是从您的作业名称(NodePy)和您的jenkins配置键入的,您只需要工作区中创建nodepy目录,然后将文件放在那里.你可以改变你的詹金斯作业配置,并将它签出回购在正确的子目录或你可以自己移动的文件:gitnodepy

mkdir .nodepy
# .nodepy is hidden, * doesn't capture hidden files.
mv * .nodepy
mv .nodepy nodepy
Run Code Online (Sandbox Code Playgroud)


Dav*_*son 0

事实证明,我所需要做的就是遵循这个问题的答案,以便让 Jenkins 将我的存储库克隆到子目录中workspace/nodepy/。由于 Jenkins 在 中运行构建workspace,因此它会找到该包。

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