如何在Jenkinsfile或Makefile中指定Python脚本的运行版本?
解决方案
可以按Jenkins Stage粒度指定Python版本,有以下几种可落地的方案:
- 方案1:修正coverage调用方式,直接指定Python版本执行
你之前的python3.9 coverage run -m discover -v写法有误,coverage是Python第三方模块,需要通过对应版本Python的-m参数加载执行,修改Makefile中的指令为:
只要Jenkins agent上已经安装了Python3.9,且对应版本的pip已经安装了coverage、unittest相关依赖,就可以正常执行业务代码中的3.9+新特性。python3.9 -m coverage run -m unittest discover -v python3.9 -m coverage xml mkdir coverage-reports || true cp coverage.xml coverage-reports/coverage-report.xml - 方案2:Makefile增加可配置Python变量,灵活适配多环境
对Makefile做兼容改造,支持调用时传入自定义Python版本:
之后在对应的Jenkins Stage中执行make命令时传入参数即可指定版本:# 定义默认Python版本,调用时可覆盖 PYTHON ?= python3 test: $(PYTHON) -m coverage run -m unittest discover -v $(PYTHON) -m coverage xml mkdir -p coverage-reports cp coverage.xml coverage-reports/coverage-report.xml
该方案同时兼容本地开发环境和Jenkins线上环境,不需要两边单独修改配置。stage('单元测试') { steps { sh 'make test PYTHON=python3.9' } } - 方案3:Stage内创建独立虚拟环境,完全隔离Python版本
如果需要完全规避全局环境的影响,可以在对应Stage中单独创建Python3.9的虚拟环境,所有依赖都安装在虚拟环境中:
该方案不需要依赖全局安装的coverage等依赖,完全和全局环境隔离,不会影响其他Stage的执行。stage('单元测试') { steps { sh ''' python3.9 -m venv .test_venv source .test_venv/bin/activate pip install -r requirements.txt make test ''' } post { always { sh 'rm -rf .test_venv' } } }
内容的提问来源于stack exchange,提问作者RKoornneef
相关产品推荐
相关产品推荐

