工作环境
- 系统版本:ubuntu18
- java版本:jdk1.8
- python版本:python3.6
- jenkins版本:jenkins2.190.3
- jenkins安装方法:apt-get安装
问题点
在ubuntu下用的jenkins,所有需要的module已经是预先安装好了,在任务中执行python3脚本时报找不到module错误,报错log如下:
问题分析
把当前目录添加到系统环境变量中(无效)
因为之前在windows上也遇到过类似的问题,大概是因为python环境变量的问题,解决方法就是将当前的路径加入到系统环境变量中,把下面这段代码加入到你要执行的python脚本代码的最前面。但是这次在ubuntu下好像并没有什么luan用。
import os
import sys
# 把当前目录加入到系统环境变量中
sys.path.append(os.path.split(os.path.dirname(os.path.abspath(__file__)))[0])
linux用户权限问题(无效)
然后我就想到了是不是用户权限的问题,查看了下jenkins的目录都是属于一个叫jenkins的用户;
在jenkins执行任务的shell脚本中通过 whoami 命令查看了下当前用户,就是jenkins,这应该是在我们安装jenkins的时候,系统默认创建了jenkins这么一个用户,这是一个普通用户~
查阅资料,发现可以通过修改配置来改变jenkins启动用户,修改/etc/default/jenkins文件下的JENKINS_USER属性
改完后,重启jenkins,jenkins报错,还是行不通,把配置再改回去。
# 默认是用户是jenkins
# user and group to be invoked as (default to jenkins)
#JENKINS_USER=$NAME
JENKINS_USER=root
JENKINS_GROUP=$NAME
到这里,其实问题已经基本找到了,只是操作方法有点行不通,或者是没有配置没有改对。
问题点就出在我使用的账号,我使用的服务器是搭建的,账号也是运维给的,所以之前的所有操作都是用的这个账号,包括python环境安装,pip安装工具包~ 然后这里jenkins启动的时候是用的自己创建的jenkins的账号,所以其实这两个账号所在的环境是不一样的~ 导致在jenkins用户的环境下找不到python的module。
解决方法
因为已经有了jenkins这个账号了,所以给这个jenkins这个账号去设置一个密码
sudo passwd jenkins
#...输入你的密码
用jenkins这个账号去登陆你的服务器
然后用pip命令去安装你需要的module,装完之后重启下jenkins服务,再执行的你的任务,应该就可以找到module了。
jenkins@ceshi:~$pip3 install xxxxx
我的这个方法比较笨,也可以用其它的办法解决。
- 在最开始安装的时候,就去设置这个启动用户为当前你使用的用户,这样子就不会有环境的问题的。
- 修改配置文件/etc/default/jenkins和/etc/init.d/jenkins,来改变jenkins的启动用户,反正就这两个,具体怎么改,自己查查资料。
- 自己通过配置命令去启动来改变启动的用户,具体操作自行查资料。