【发布时间】:2015-04-10 20:25:03
【问题描述】:
我正在使用 Makefile 提供一致的单一命令来设置 virtualenv、运行测试等。我已将 Jenkins 实例配置为从 mercurial repo 中提取,然后运行“make virtualenv”,它会执行以下操作:
virtualenv --python=/usr/bin/python2.7 --no-site-packages . && . ./bin/activate && pip install -r requirements.txt
但由于某种原因,它坚持使用系统安装的 pip 并尝试将我的包依赖项安装在系统站点包而不是 virtualenv 中:
error: could not create '/usr/local/lib/python2.7/dist-packages/flask': Permission denied
如果我添加一些调试命令并明确指向我的 virtualenv 中的 pip,事情会变得更加混乱:
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”的输出显示要安装在 virtualenv 中的 pip 和可执行文件:
-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
“which pip”的输出似乎要使用正确的:
/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
【问题讨论】:
标签: jenkins virtualenv