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