jenkins中的execute shell在执行时候报错yj

jenkins中的execute shell在执行时候报错
execute shell设置如下:
image
执行报错:
image
然后再linux机器上看:安装pytest,用pip install pytest方式安装
image
上图可以看到已经有pytest
进到目录下:
image
执行pytest --version会有报错:

环境问题

最好先source下你的~/.bash_profile
因为目前你用的是哪个版本的python你都可能不确定。
source ~/.bash_profile 是为了让你的持续集成的shell环境与你本地登录时候的环境保持一致,拥有相同的环境变量。
which python 确认下你的python到底用的是哪一个python。
which pytest 确认下你的pytest有没有安装对。
python -m pytest 万一安装不对,还可以用这个代替pytest命令

你的项目如果用到了venv环境,记得先进入虚拟环境下的目录,先执行pip install -r requirements.txt安装你的依赖,然后再执行pytest

source ~/.bash_profile 是为了让你的持续集成的shell环境与你本地登录时候的环境保持一致,拥有相同的环境变量。
请问这个本地登录时候的环境指的是哪个环境,我的本地是linux 是这个环境吗?

一个是你的本地环境,你就是你的个人电脑,你日常开发的环境。
持续集成环境是另外一套,他用的哪个取决于你的jenkins配置,jenkins有节点概念你知道吧,用的哪个节点哪个就是持续集成的环境。你本地调试的很好,不代表你在其他的环境里可以跑起来。有可能你的持续集成用的节点,连python都没有安装。

我的日常开发环境是在windows环境,代码上传在git,jenkins安装在linux的机器上,在linux上安装的jenkins,linux环境是安装了python pytest 等,在linux中可以执行我的测试文件,但是配置在jenkins(在jenkins的execute shell中配置后 ),提示pytest没有找到。
image
所以初步怀疑:
1.jenkins执行的这个环境没有权限(但是具体不懂应该怎么设置)
2.不知道jenkins是拿哪个用户执行的(跟用户有没有关系)

@seveniruby

你贴下你这个job用的节点,看下用的是master,还是哪个?
然后把我给你的命令全部放到你的execute shell中全部执行下,把输出完整的贴出来。


目前jenkins只有一个master节点,群里问了助教,不一定非要slave节点
2.executeshell 如下:
image
3.执行报错如下:
image
@seveniruby

先执行pip install -r requirements.txt 安装你的依赖,然后再执行pytest

安装依赖是指的是把需要的依赖写在配置文件requirements.txt中?

source ~/.bash_profile


你是不是写错了,怎么最后多了2个字符

另外你也可以用如下语句屏蔽报错

source ~/.bash_profile ||: 

你看下python的virtualenv的教程,我记得在讲pytest的时候就提到了这块的技术点。你新建项目要用venv,然后编写完成后,把所有的依赖通过如下命令保存到一个清单中。

pip freeze > requirements.txt

然后在jenkins中重新使用pip install -r requirements.txt安装所有的依赖清单。然后再调用pytest去执行