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

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

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

共收到 20 条回复 时间 点赞

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

在 pipeline 里直接指定 python 的版本

docker 吧

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

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

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

ola嘿嘿 回复

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

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

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

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

pyenv,给目录制定运行版本

宝藏 #12 · 2020年08月12日 Author
孙高飞 回复

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

宝藏 回复

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

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

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

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

宝藏 #16 · 2020年08月12日 Author
宝藏 回复

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

宝藏 #17 · 2020年08月12日 Author
孙高飞 回复

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

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

宝藏 #19 · 2020年08月12日 Author
Jerry li 回复

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

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

需要 登录 後方可回應,如果你還沒有帳號按這裡 注册