最近在 Jenkins 上部署了一个新的项目,这个项目是依赖 python3.7 运行的,但是现在 Jenkins 所在服务器已经安装了 python3.5 ,同时也是其他 job 在使用。
我应该如何处理这个问题呢?Jenkins 上面是有地方可以配置的吗?还是需要在服务器端进行处理? 同时还不能影响其他 job 使用 python3.5
多安装一个 3.7 的版本,然后你的 job 指定用这个版本运行,不要改默认的 3.5
解法好多啊, 你装个对应的 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,给目录制定运行版本
和 jenkins 没关系,是给服务器的某个目录指定 python 运行版本。
包可以重新安装,需要什么就 pip 什么
服务器配置多个 python 虚拟环境,在 job 中加上切换虚拟环境的命令。各自互不影响
直接建立不同版本的镜像,需要的时候启动,运行完自动销毁,环境也是隔离的,多个任务在一个环境运行容易出问题
docker 吧
在 pipeline 里直接指定 python 的版本
谢谢各位的指点,这个问题解决了,后来发现是 Debian 系统自带的一个 python2 和 python3.5 版本,后来重新装了 python3.7 就好了。之后看来要学习 docker 了