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

时间:2014-01-13 23:57:23

标签: python python-2.7 jenkins virtualenv jenkins-plugins

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

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

我如何确保Jenkins使用正确的virtualenv?

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

source test/bin/activate 

3 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:5)

首先,你应该避免使用ShiningPanda,因为它已经坏了。它将fail if you try to run jobs in parallel并且与Jenkins2管道不兼容。

当并行运行构建(并发)时,Jenkins会将@2@3 ...附加到工作区目录,这样两次执行就不会共享同一个文件夹。 Jenkins确实克隆了原始工作空间,所以如果它包含你在之前版本中创建的virtualenv,不要感到惊讶。

你需要自己照顾virtualenv创作,但你必须非常小心你如何使用它:

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

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

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

缺点:

  • 速度:virtualenvs不会在构建之间重复使用,因此可以完全重新创建它们。如果使用--site-packages,可能会大大加快创建速度(如果系统上已经安装了大量数据包)
  • 空间:如果未定期清理工作区,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>

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

答案 2 :(得分:0)

您可以使用Pyenv Pipeline Plugin。用法非常简单,只需添加


stage('my_stage'){
    steps{
        script{
            withPythonEnv('path_to_venv/bin'){
                sh("python foo.py")                              
                ...

您可以在步骤中添加pip install whatever,以更新您正在使用的任何虚拟环境。

默认情况下,它将在jenkins工作区中查找虚拟环境,如果找不到,则会创建一个新环境。