젠킨스, Python 및 루트

젠킨스, Python 및 루트

Jenkins 빌드의 일부로 Python 단위 테스트를 실행하려고 합니다. 내 빌드는 다음과 같이 실패합니다.

+ 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에 설치되며 물론 루트가 소유합니다.

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

jenkins 사용자를 루트 그룹에 추가하면 Python을 실행할 수 있습니다. 이것은 최악의 경우 위험해 보이고 기껏해야 끔찍해 보입니다.

어떻게 진행하나요? /usr/local/lib에 Python을 다시 설치해야 합니까? /usr/lib에서 Python 그룹을 변경해야 합니까? /usr/lib/python2.7에 대한 모든 액세스를 허용합니까?

저는 Ubuntu 14.04와 Python 2.7.6을 사용하고 있습니다. 고려해야 할 또 다른 점은 우리가 작성하고 있는 Python 코드가 QGIS 플러그인용이라는 것입니다. 이들은 루트로도 설치됩니다. 이것도 그룹을 변경해야 하나요?

편집: 추가 정보. jenkins 사용자는 시스템 사용자 계정으로 설정됩니다. 이로 인해 문제가 더욱 악화되는 것 같습니다. 나는 Python을 실행할 수 있는 일반 계정 gups를 가지고 있습니다(따라서 /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: 연구 중이에요가상 환경이것이 적절한 해결책인 것 같습니다. jeknins 사용자의 홈 디렉터리에 환경을 생성하기 위해 virtualenv를 실행합니다.

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

여기에는 문제가 되는 /usr/lib/python2.7/dist-packages가 포함되지 않습니다.

편집 4: Jenkins 패키지 정보.

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

답변1

몇 가지 추가 검색과 게시물의 도움을 받은 후우분투 포럼, 해결책을 찾았습니다.

그림에서 알 수 있듯이트리거그리고파힘 미사, 내 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 {} \;

내가 그걸 그 안에서 찾았어이 스택 교환우편 엽서.

관련 정보