在Jenkins主目录之外导入模块

时间:2016-01-21 18:11:19

标签: python jenkins ubuntu-14.04

我正在尝试运行位于'/home/modules/module.py'

的自定义Python模块

python脚本由Jenkins运行,位于'/home/user_name/scripts/script.py'

由于Jenkins主目录是'/ var / lib / jenkins',我如何导入我的模块?

我尝试将以下内容添加到python脚本中:

import sys
sys.path.insert(0,'/home/modules') """also /home/modules/"""

import module

但我仍然收到错误:

ImportError: No module named

我在Ubuntu 14.04和Python 2.7中运行所有内容

修改

我改变了Jenkins这样的用户目录:

root@dwh-01:~$ usermod -m -d /home/jenkins jenkins 

并修改了JENKINS_HOME=/home/jenkins

中的/etc/default/jenkins

我想我可以使用它,但现在问题是,如果我登录jenkins shell并执行:

jenkins@dwh-01:/$ cd
bash: cd: jenkins/: No such file or directory

cd命令的行为是否应该指引我/home/jenkins/? 如果我在/home/中重复同样的事情,那么它会起作用。

如果我尝试启动jenkins,它会给我:

  • Starting Jenkins Continuous Integration Server jenkins                                                                                                                                                                                 No directory, logging in with HOME=/

修改-2:

用户jenkins home dir错误已修复,我只是确保用户的主目录是/ home / jenkins使用usermod -d /home/jenkins jenkins

我离导入模块更近了一步,但是仍然有问题在jenkins主目录之外走了一步。

2 个答案:

答案 0 :(得分:1)

您应该有两个选项可以将module导入到您的代码中。

选项1

import sys
sys.path.append('/home/modules')
import module

选项2

import importlib.machinery
importlib.machinery.SourceFileLoader('module', '/home/modules').load_module()

如果这些都不起作用,希望他们至少能指出你和其他人正确的方向。

答案 1 :(得分:0)

好吧终于明白了。 我所做的是将/etc/default/jenkins文件中的变量 JENKINS_USER JENKINS_GROUP 更改为jenkins用户文件夹之外所需的用户({{1}之外}})。

这样,Jenkins运行的脚本将像我指定的选定用户一样运行。

之后,我意识到在Jenkins中,即使工作目录为/var/lib/jenkins,也可以从“ / ”调用脚本和文件

所以诀窍是:

- 在jenkins主目录之外访问脚本

- 从绝对路径导入模块。