Jenkins、Python 和 root

Jenkins、Python 和 root

我正在尝试将 Python 单元测试作为 Jenkins 构建的一部分运行。我的构建失败如下:

+ export PYTHONPATH=/usr/lib/python2.7:/usr/lib/python2.7/dist-packages:/var/lib/jenkins/jobs/GUPS_Unit_Tests/workspace/python/plugins:/var/lib/jenkins/jobs/GUPS_Unit_Tests/workspace/:/usr/share/qgis/python:/usr/share/qgis/python/plugins:/var/lib/jenkins/.qgis2/python/plugins:/var/lib/jenkins/jobs/GUPS_Unit_Tests/workspace/gupsutest
+ export PYTHONHOME=/usr
+ cd gupsutest
+ python -m unittest discover
ImportError: No module named site

事实证明这是一个文件权限问题。 Python安装在/usr/lib/python2.7,当然它是root拥有的。

-rwxrwxr--   1 root root  20388 Jun 22  2015 site.py
-rwxrwxr--   1 root root  19727 Feb  2 07:45 site.pyc

如果我将 jenkins 用户添加到 root 组,我就可以运行 Python。这在最坏的情况下看起来很危险,在最好的情况下看起来很糟糕。

我该如何继续?我需要将 Python 重新安装到 /usr/local/lib 吗?我是否需要更改 /usr/lib 中 Python 的组?我是否允许对 /usr/lib/python2.7 的所有访问?

我使用 Ubuntu 14.04 和 Python 2.7.6。还有一点需要考虑,我们正在编写的 Python 代码是用于 QGIS 插件的。这些也已以 root 身份安装。我也应该为这些更改组吗?

编辑:更多信息。 jenkins 用户被设置为系统用户帐户。这似乎加剧了这个问题。我有一个普通帐户gups,它能够运行Python(因此可以访问/usr/lib/python2.7)。

/etc/组

jenkins:x:125:
gups:x:1000:

/etc/密码

jenkins:x:116:125:Jenkins,,,:/var/lib/jenkins:/bin/bash
gups:x:1000:1000:GUPS Buildmaster,,,:/home/gups:/bin/bash

EDIT2:python 文件夹权限之间有趣的区别。不知道为什么 python3.4 和 python2.7 不同。

gups@gups-xxxxxxxxxx:~$ ls -la /usr/lib | grep python
-rw-r--r--   1 root root        68232 Jan 16 20:42 libqgispython.so.2.8.6
drwxrwxr--  26 root root        12288 Feb 12 08:03 python2.7
drwxr-xr-x   3 root root         4096 Feb 23  2014 python3
drwxr-xr-x  33 root root        20480 Feb  4 05:16 python3.4
drwxr-xr-x   2 root root         4096 Feb  3 08:02 python-tz

EDIT3:我一直在研究虚拟环境这似乎是一个合适的解决方案。我运行 virtualenv 在我的 jeknins 用户的主目录中创建一个环境。

sudo virtualenv --system-site-packages /var/lib/jenkins/_python

这不包括 /usr/lib/python2.7/dist-packages,这是一个问题。

编辑4:詹金斯包信息。

gups@gups-Satellite-U925t:~$ sudo dpkg -l | grep jenkins
ii  jenkins                                               1.650                                               all          continuous integration system

答案1

经过一些额外的搜索和来自帖子的一些帮助Ubuntu 论坛,我已经找到了解决方案。

如图所示特里格法希姆·米萨,我的 python2.7 文件夹的权限实际上很时髦。

我这样修复了它们。

sudo chmod 755 /usr/lib/python2.7
sudo find /usr/lib/python2.7 -type d -exec chmod 755 {} \;
sudo find /usr/lib/python2.7/*.py -exec chmod 644 {} \;

我在其中找到了这个堆栈交换邮政。

相关内容