Я использую Makefile для обеспечения согласованных одиночных команд для настройки virtualenv, запуска тестов и т.д. Я настроил свой экземпляр Jenkins для переноса из меркурийного репо и затем запустил "make virtualenv", который делает это:
virtualenv --python=/usr/bin/python2.7 --no-site-packages . && . ./bin/activate && pip install -r requirements.txt
Но по какой-то причине он настаивает на использовании установленного системой пипа и пытается установить мои зависимости пакета в системных сайтах-пакетах, а не в virtualenv:
error: could not create '/usr/local/lib/python2.7/dist-packages/flask': Permission denied
Если я добавлю некоторые команды отладки и явно укажу на пипс в своем виртуальном пространстве, все становится еще более запутанным:
virtualenv --python=/usr/bin/python2.7 --no-site-packages . && . ./bin/activate && ls -l bin && which pip && pwd && ./bin/pip install -r requirements.txt
Что генерирует следующий вывод:
New python executable in ./bin/python2.7
Not overwriting existing python script ./bin/python (you must use ./bin/python2.7)
Installing setuptools, pip...done.
Running virtualenv with interpreter /usr/bin/python2.7
Похоже, что Jenkins не восстанавливает среду с нуля для каждой сборки, что ставит меня как странный выбор, но не должно влиять на мою непосредственную проблему.
Вывод из "ls -l bin" показывает, что pip должен быть установлен в virtualenv и исполняемый файл:
-rw-r--r-- 1 jenkins jenkins 2248 Apr 9 21:14 activate
-rw-r--r-- 1 jenkins jenkins 1304 Apr 9 21:14 activate.csh
-rw-r--r-- 1 jenkins jenkins 2517 Apr 9 21:14 activate.fish
-rw-r--r-- 1 jenkins jenkins 1129 Apr 9 21:14 activate_this.py
-rwxr-xr-x 1 jenkins jenkins 278 Apr 9 21:14 easy_install
-rwxr-xr-x 1 jenkins jenkins 278 Apr 9 21:14 easy_install-2.7
-rwxr-xr-x 1 jenkins jenkins 250 Apr 9 21:14 pip
-rwxr-xr-x 1 jenkins jenkins 250 Apr 9 21:14 pip2
-rwxr-xr-x 1 jenkins jenkins 250 Apr 9 21:14 pip2.7
lrwxrwxrwx 1 jenkins jenkins 9 Apr 10 19:31 python -> python2.7
lrwxrwxrwx 1 jenkins jenkins 9 Apr 10 19:31 python2 -> python2.7
-rwxr-xr-x 1 jenkins jenkins 3349512 Apr 10 19:31 python2.7
Вывод "какой пип", похоже, хочет использовать правильный:
/var/lib/jenkins/jobs/Run Tests/workspace/bin/pip
Мой текущий рабочий каталог - это то, что я ожидаю:
/var/lib/jenkins/jobs/Run Tests/workspace
Но... wtf?
/bin/sh: 1: ./bin/pip: Permission denied
make: *** [virtualenv] Error 126
Build step 'Execute shell' marked build as failure
Finished: FAILURE