Я пытаюсь запустить Python unittest как часть сборки 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
Я могу запустить Python, если добавлю пользователя jenkins в группу root. Это кажется опасным в худшем случае и плохой формой в лучшем.
Как мне поступить? Переустановить Python в /usr/local/lib? Изменить группу для Python в /usr/lib? Разрешить ли мне весь доступ к /usr/lib/python2.7?
Я использую Ubuntu 14.04 с Python 2.7.6. Еще кое-что, что следует учесть: код Python, который мы пишем, предназначен для плагинов QGIS. Они также были установлены от имени root. Должен ли я изменить группу и для них?
EDIT: Дополнительная информация. Пользователь jenkins настроен как учетная запись системного пользователя. Похоже, это способствует возникновению проблемы. У меня есть обычная учетная запись gups, которая может запускать Python (и поэтому имеет доступ к /usr/lib/python2.7).
/etc/group
jenkins:x:125:
gups:x:1000:
/etc/passwd
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, который кажется подходящим решением. Я запустил virtualenv для создания среды в домашнем каталоге пользователя jeknins.
sudo virtualenv --system-site-packages /var/lib/jenkins/_python
Это не включает /usr/lib/python2.7/dist-packages, что является проблемой.
EDIT4: Информация о пакете Jenkins.
gups@gups-Satellite-U925t:~$ sudo dpkg -l | grep jenkins
ii jenkins 1.650 all continuous integration system