詹金斯:把我的Python模块放在PYTHONPATH上
我正在使用Jenkins测试我开发的Python模块。但是,我会遇到如下错误:詹金斯:把我的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)
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
/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
reponodepy
,也可以自己移动文件:
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