Estou tentando executar o teste unitário do Python como parte de uma compilação do Jenkins. Minha compilação estava falhando da seguinte forma:
+ 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
Como se constata, esse é um problema de permissão de arquivo. O Python é instalado em /usr/lib/python2.7, que obviamente é de propriedade do root.
-rwxrwxr-- 1 root root 20388 Jun 22 2015 site.py
-rwxrwxr-- 1 root root 19727 Feb 2 07:45 site.pyc
Eu posso executar o Python se eu adicionar o usuário jenkins ao grupo raiz. Isso parece perigoso na pior e má forma na melhor das hipóteses.
Como posso proceder? Eu reinstalei o Python em / usr / local / lib? Eu mudo o grupo para Python em / usr / lib? Permitir acesso a /usr/lib/python2.7?
Estou usando o Ubuntu 14.04 com o Python 2.7.6. Outra coisa a considerar, o código Python que estamos escrevendo é para plugins QGIS. Estes também foram instalados como root. Devo alterar o grupo para esses também?
EDIT: mais informações. O usuário jenkins é configurado como uma conta de usuário do sistema. Isso parece estar contribuindo para o problema. Eu tenho um grupo de contas normal que é capaz de executar o Python (e, portanto, tem acesso ao /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: Diferença interessante entre permissões de pasta python. Não tenho certeza porque python3.4 e python2.7 são diferentes.
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:
Eu tenho procurado em virtualenv que parece ser uma solução apropriada. Eu rodei virtualenv para criar um ambiente no diretório home do meu usuário jeknins.
sudo virtualenv --system-site-packages /var/lib/jenkins/_python
Isso não inclui /usr/lib/python2.7/dist-packages, o que é um problema.
EDIT4:
Informações do pacote Jenkins.
gups@gups-Satellite-U925t:~$ sudo dpkg -l | grep jenkins
ii jenkins 1.650 all continuous integration system