Python 如何让 jenkins 上的 job,使用各自版本的 python 运行?

宝藏 · 2020年08月12日 · 最后由 宝藏 回复于 2020年08月14日 · 4112 次阅读

最近在 Jenkins 上部署了一个新的项目,这个项目是依赖 python3.7 运行的,但是现在 Jenkins 所在服务器已经安装了 python3.5 ,同时也是其他 job 在使用。
我应该如何处理这个问题呢?Jenkins 上面是有地方可以配置的吗?还是需要在服务器端进行处理? 同时还不能影响其他 job 使用 python3.5

共收到 20 条回复 时间 点赞

多安装一个 3.7 的版本,然后你的 job 指定用这个版本运行,不要改默认的 3.5

Jerry li 回复

那 python3.7 不需要在服务器端配置环境变量吗?那样会影响脚本里面的执行吧?

解法好多啊, 你装个对应的 slave 也行, 用 docker 的插件直接启动个 python 的容器来执行也行, 或者用 venv 来回切换也行。

孙高飞 回复

我们的 jenkins 就是运行在 k8s 的一个容器中的,还可以像你说的一样起一个 docker 吗?我对 k8s 这一块还不太了解。slave 的我们考虑过,但是没有打算用,就打算直接运行在 jenkins 的服务器中。

宝藏 回复

对了,既然已经有 job 是依赖 python3.5 解释器的,那我换成 python3.7 的解释器,是不是一样能够兼容他的 job?会不会影响到他的 job 的运行呢?不太有可能吧?

在启动你这个项目的进程里,使用/usr/bin/python3.7 的方式强制使用 3.7 去启动不行么? 或者在启动进程时,传入环境变量

我是回去使用 python 命令启动一个 startup.py 文件,你说的方法是可以,但是启动完以后,后续的其他操作不会使用环境变量中的 python3.5 吗?还是会使用这个结对路径的 python3.7 吗?

宝藏 回复

可以啊,jenkins 2.0 的 pipeline 了解一下。 我给你发个我们的例子:https://testerhome.com/articles/22280 在这里记录了。 我做 python sdk 的兼容性测试,就是一个 pod 里起 N 个容器,每个容器是不同的 python 版本。来回切着测。

孙高飞 回复

哦哦,这个就是在同一个 k8s 的另一个 docker 中新建一个 pod,然后使 jenkins 指向这个 pod 作为 slave。我有一个方法不知道可不可行,就是在 jenkins 所在的容器中新下载一个 python3.7,将他里面的 python 解释器改名为 python37,然后设置环境变量,这样应该可以吧,但是我不清楚的是,我的启动文件可以通过 python37 这个解释器启动,但是脚本内也会使用 python37 这个解释器吗?还是又回用到 python3(python3.5)的解释器?

pyenv,给目录制定运行版本

宝藏 #11 · 2020年08月13日 Author
ola嘿嘿 回复

在服务器端安装这个,然后指定 jenkinsjob 的工作区间的运行版本吗?

和 jenkins 没关系,是给服务器的某个目录指定 python 运行版本。

宝藏 #14 · 2020年08月13日 Author
ola嘿嘿 回复

如果安装了这个的话,那 python3.5 那个 job 需要用到的包啥的不就没了吗?不会有影响?

包可以重新安装,需要什么就 pip 什么

服务器配置多个 python 虚拟环境,在 job 中加上切换虚拟环境的命令。各自互不影响

直接建立不同版本的镜像,需要的时候启动,运行完自动销毁,环境也是隔离的,多个任务在一个环境运行容易出问题

docker 吧

在 pipeline 里直接指定 python 的版本

宝藏 #17 · 2020年08月14日 Author

谢谢各位的指点,这个问题解决了,后来发现是 Debian 系统自带的一个 python2 和 python3.5 版本,后来重新装了 python3.7 就好了。之后看来要学习 docker 了

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册