jenkins - 如何在Jenkins中创建Python virtualenv?

标签 jenkins virtualenv

我正在使用Makefile提供一致的单个命令来设置virtualenv,运行测试等。我已将Jenkins实例配置为从软件仓库中提取,然后运行“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

“哪个点”的输出似乎要使用正确的一个:
/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,多家公司和小型项目中使用python virtualenvs,不能说我找到了“THE”答案。不过,我希望分享我的经验可以帮助其他人节省时间。希望我能得到更多反馈,以使决定更加容易。

  • 避免使用ShiningPanda -它维护得不好,与Jenkins2管道不兼容,并阻止并行执行作业。另外,它还有将孤立环境保留在磁盘上的坏习惯。
  • 通过bash和virtualenv进行DIY 是我当前的最爱。在$ WORKSPACE中创建它,如果不总是清除它,请在激活它们之前运行relocatable。这是因为jenkins工作区文件夹磁盘位置可以在作业N和N + 1的执行之间改变。

  • 如果使用确实需要相同virtualenv的多个构建器,则最简单的方法是将环境转储到文件中并在新构建器的开头将其来源。

    为了简化维护,我打算研究以下方面:
  • direnvm
  • virtualenv包装器(mkvirtualenv)
  • pyenv

  • 如果您达到了shebang命令行限制,那么最好的办法就是将jenkins主目录更改为/j

    关于jenkins - 如何在Jenkins中创建Python virtualenv?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29570085/

    相关文章:

    mysql - Spring Boot 和 MySql - 无法使用新的服务数据库用户名/密码

    ios - Jenkins 不支持构建操作 'archive'

    Jenkins cron 计划无效的触发器类型 "parameterizedCron"

    python - PIL 说它有 "support available"但在保存文件时仍然给出 IOError

    python - 如何判断 virtualenv 是否在 Windows Git Bash 中激活

    maven - 将 Jenkins 构建名称设置为关联的 Maven 版本

    jenkins - dsl 插件删除作业时删除工作区

    python - virtualenvwrapper 错误 : The path python2 (from --python=python2) does not exist

    python - pip install 在 vi​​rtualenv 中失败,而在 virtualenv 之外成功

    python - 我可以在同一台计算机上使用同名的多个虚拟环境吗