如何告诉Jenkins使用特定的virtualenv python

Exp*_*ing 10 python virtualenv python-2.7 jenkins jenkins-plugins

我已经创建了一个运行我的python脚本的virtualenv.

现在,当我将这个python脚本与Jenkins集成时,我发现当时执行Jenkins正在使用错误的python环境.

我怎样才能确保Jenkins使用正确的virtualenv?

举个例子,对于我的情况,我想使用virtualenv测试.我如何使用这个预先准备的virtualenv来运行我的python脚本.

source test/bin/activate 
Run Code Online (Sandbox Code Playgroud)

Iva*_*uev 11

你应该安装一个python插件.我用过ShiningPanda.然后,您将能够在Manage Jenkins> Configure System> Python> Python安装中创建单独的虚拟环境配置.在作业配置中将有Python Builder步骤,您可以在其中选择python环境.

只需确保您没有从现有的python虚拟环境中启动Jenkins服务.

  • @IvanNevostruev,Jenkins已经在现有的python虚拟环境中启动了,我怎么能改变它? (2认同)

sor*_*rin 7

首先,你应该避免使用ShiningPanda,因为它已经坏了.它将如果您尝试运行并行作业失败,并且也与Jenkins2管道不兼容.

当建立并联(并行)詹金斯运行将追加@2,@3...到工作区的目录,以便两次执行不会共享相同的文件夹中.Jenkins确实克隆了原始工作空间,所以如果它包含您在之前版本中创建的virtualenv,请不要感到惊讶.

您需要自己处理virtualenv创建,但您必须非常小心如何使用它:

  • workspaces文件夹可能无法清理,其位置可能会从一个构建更改为另一个构建
  • virtualenvs知道在被移动时会被打破,而jenkins会移动它们.
  • 在工作区外创建文件是一个非常糟糕的CI实践,避免使用/ tmp的诱惑

因此,您唯一安全的选择是为工作区内的每个构建创建一个唯一的虚拟环境文件夹.您可以使用$JOB_NUMBER环境变量轻松完成此操作.

即使您有并行运行的作业,这也会有所不同.这也不会重复.

缺点:

  • 速度:virtualenvs不会在构建之间重用,因此它们可以完全重新创建.如果您使用--site-packages,可能会大大加快创建速度(如果系统上已经安装了大量数据包)
  • space:如果没有定期清理工作区,那么virtualenvs的数量将会增加.解决方法:每周或每两周清理一次工作区.这也是发现其他错误的好方法.有些人选择为每次执行清理工作区.

Shell片段

      #/bin/bash
      set -euox pipefail

      # Get an unique venv folder to using *inside* workspace
      VENV=".venv-$BUILD_NUMBER"

      # Initialize new venv
      virtualenv "$VENV"

      # Update pip
      PS1="${PS1:-}" source "$VENV/bin/activate"

      # <YOUR CODE HERE>
Run Code Online (Sandbox Code Playgroud)

第一行是实现bash字符串模式,更多细节见http://redsymbol.net/articles/unofficial-bash-strict-mode/