我已经为运行我的python脚本创建了一个virtualenv。
现在当我将这个python脚本与Jenkins集成时,我发现当时执行Jenkins正在使用错误的python环境。
我如何确保Jenkins使用正确的virtualenv?
作为一个例子,对于我的情况,我想使用virtualenv测试。我如何使用这个预先准备的virtualenv来运行我的python脚本。
source test/bin/activate
答案 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创作,但你必须非常小心你如何使用它:
因此,您唯一安全的选择是为工作区内的每个构建创建一个唯一的虚拟环境文件夹。您可以使用$JOB_NUMBER
环境变量轻松完成此操作。
即使您有并行运行的作业,这也会有所不同。这也不会重复。
缺点:
--site-packages
,可能会大大加快创建速度(如果系统上已经安装了大量数据包) #/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工作区中查找虚拟环境,如果找不到,则会创建一个新环境。