詹金斯:把我的Python模块放在PYTHONPATH上

詹金斯:把我的Python模块放在PYTHONPATH上,python,jenkins,environment-variables,Python,Jenkins,Environment Variables,我正在使用Jenkins测试我开发的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)

我正在使用Jenkins测试我开发的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
文件“/var/lib/jenkins/jobs/NodePy/workspace/convergence.py”,第6行,在workspace.convergence中
失败示例:
从nodepy导入rk、收敛、ivp
提出的例外情况:
回溯(最近一次呼叫最后一次):
文件“/usr/lib/python2.7/doctest.py”,第1289行,正在运行
test.globs中的compileflags,1)
文件“”,第1行,在
从nodepy导入rk、收敛、ivp
ImportError:没有名为nodepy的模块
如何在Jenkins中设置PYTHONPATH(以便我的模块可以导入)

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

编辑:

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

  • 将其添加到参数化作业参数列表中(并填写或提供默认值)
  • 或者,如果您有jenkins的管理员权限,您可以将其添加到那里的系统变量中(转到
    管理jenkins
    ,然后转到
    系统配置
  • 或者在脚本中使用
    sys.path.append
e、 g

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

包裹问题

/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
)和jenkins配置键入的,您只需要在工作区中创建
NodePy
目录,并将文件放到那里。您可以让它在正确的子目录中签出
git
repo
nodepy
,也可以自己移动文件:

mkdir .nodepy
# .nodepy is hidden, * doesn't capture hidden files.
mv * .nodepy
mv .nodepy nodepy

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

pip install -e ./nodepy

事实证明,我所需要做的就是按照答案进行操作,以便让Jenkins将我的repo克隆到一个子目录
workspace/nodepy/
。由于Jenkins运行内置的
工作区
,因此它会找到包


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

在python3安装过程中,确保安装是针对所有用户的


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

由于您通过jenkinks SCM插件而不是手动获取nodepy软件包文件,因此需要设置正确的选项。我知道你已经找到了这个选项。在这里,我看到了一个3年前的答案,因为我在谷歌上找不到其他任何东西,所以我想评论一下,
sys.path.append(os.environ['WORKSPACE']+/path/to/file)
就是有效的答案<代码>导出pythonpath在本地工作,但在詹金斯对我没有任何帮助。如果有人对jenkins admin有更新的解决方案,请告诉我,在我的系统变量中添加什么谢谢你,你的解决方案今天真的帮了我的忙!最初,我的目录中没有“init.py”,因为我使用的是Python 3.7。有一次我按照你的建议加了回去。詹金斯找到了模块。
/var/lib/jenkins/jobs/NodePy/workspace/
mkdir .nodepy
# .nodepy is hidden, * doesn't capture hidden files.
mv * .nodepy
mv .nodepy nodepy
pip install -e ./nodepy