You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins流水线构建阶段安装pytest后,测试阶段仍提示pytest not found怎么办

问题根因
  • 你在每个stage单独配置了docker agent,Jenkins会为每个stage启动全新的独立python:3容器,Build阶段容器内安装的依赖不会被带到Test阶段的新容器中
  • 就算依赖文件被挂载到工作空间,你通过pip安装的用户侧可执行文件默认保存在$HOME/.local/bin目录,该目录不在系统默认PATH中,直接执行pytest命令也会找不到
可行解决方案

方案1:全局复用同一个Docker容器(最推荐)

把Docker agent配置提到流水线顶层,所有stage共用同一个容器,依赖一次安装全流程可用,修改后的Jenkinsfile如下:

pipeline {
    agent {
        docker { image 'python:3' }
    }

    stages {
        stage('Build') {
            steps {
                echo 'Building..'
                withEnv(["HOME=${env.WORKSPACE}"]) {
                    sh '/usr/local/bin/python -m pip install --upgrade pip'
                    sh 'pip install -r requirements.txt'
                }
            }
        }
        stage('Test') {
            steps {
                echo 'Testing..'
                withEnv(["HOME=${env.WORKSPACE}"]) {
                    // 也可以直接用python -m调用避免PATH问题
                    sh 'python -m pytest ./tests/unit/test_models.py'
                }
            }
        }
        stage('Deploy') {
            steps {
                echo 'Deploying....'
            }
        }
    }
}

方案2:保留多容器配置,调整命令调用方式

如果你的业务要求每个stage必须使用独立容器,可修改Test阶段的执行命令,两种修改方式二选一:

  • 方式A:通过python模块方式调用pytest,无需关心PATH配置
    sh 'python -m pytest ./tests/unit/test_models.py'
  • 方式B:执行命令前把pip可执行文件目录加入PATH
    sh '''
    export PATH=$HOME/.local/bin:$PATH
    pytest ./tests/unit/test_models.py
    '''
    

方案3:使用虚拟环境保存依赖

在Build阶段创建虚拟环境并安装依赖,虚拟环境文件会保存在Jenkins自动挂载的工作空间中,Test阶段直接激活虚拟环境即可使用:

// Build阶段新增命令
sh 'python -m venv venv'
sh 'source venv/bin/activate && pip install -r requirements.txt'

// Test阶段执行命令前先激活虚拟环境
sh 'source venv/bin/activate && pytest ./tests/unit/test_models.py'

内容的提问来源于stack exchange,提问作者Clement

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:54:04