如何通过Maven在Jenkins中执行本地存储的Python脚本
Jenkins通过Maven执行本地Python脚本操作指南
前置校验(做配置前先确认,避免白忙活)
- 路径可达性校验:如果Jenkins和你存脚本的是同一台机器,直接记好脚本的绝对路径即可;如果Jenkins部署在远程服务器/容器里,必须先把脚本所在目录挂载/拷贝到Jenkins节点能访问的位置,远程Jenkins没法直接读取你个人电脑本地磁盘的文件。
- 环境校验:Jenkins运行节点上提前装好JDK、Maven、Python,三个组件的环境变量配置完成,在Jenkins「全局工具配置」页面绑定好JDK、Maven的安装路径,避免执行时提示找不到命令。
方案1:通过Maven exec插件绑定执行(推荐,和Maven生命周期强绑定,流程规范)
- 打开Maven项目根目录下的
pom.xml,在<build><plugins>节点下添加exec插件配置,示例如下:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>3.1.0</version> <executions> <execution> <id>run-local-python</id> <!-- 绑定到Maven生命周期阶段,比如编译后执行填compile,测试阶段执行填test,打包前执行填prepare-package --> <phase>test</phase> <goals> <goal>exec</goal> </goals> <configuration> <!-- 配置Python可执行文件路径,Windows填python.exe全路径,Linux/Mac填python3全路径,环境变量配好的话可以直接写python/python3 --> <executable>python</executable> <arguments> <!-- 替换成你本地Python脚本的绝对路径 --> <argument>/your/absolute/path/to/target_script.py</argument> <!-- 脚本需要传参的话,按格式新增<argument>参数值</argument>即可 --> </arguments> </configuration> </execution> </executions> </plugin>
- 登录Jenkins新建Maven类型任务,在构建配置项里填写:
- 根POM路径:指向你项目的
pom.xml文件位置 - 目标命令:和你前面绑定的生命周期阶段对应,比如绑定在test阶段就填
clean test
- 根POM路径:指向你项目的
- 保存配置后直接触发构建即可,Python脚本的输出会直接打印在构建日志中,脚本执行返回非0状态码时,Maven构建会自动标记为失败,符合CI流程的状态判断逻辑。
方案2:构建步骤直接组合命令(不需要改pom.xml,适合临时执行场景)
- 在Jenkins新建自由风格项目或者Maven项目,先配置好Maven构建步骤,填写你需要执行的原有Maven命令,比如
clean install - 新增构建步骤,根据Jenkins节点的操作系统选择「执行Windows批处理命令」或者「执行Shell」,直接写入调用Python脚本的命令:
:: Windows节点用这段,替换成你自己的脚本路径 python D:\your_local_path\target_script.py
# Linux/Mac节点用这段,替换成你自己的脚本路径 python3 /your_local_path/target_script.py
注意:如果需要严格保证执行顺序(比如Maven打包完成后再跑Python脚本),把Maven命令和Python调用命令写到同一个构建步骤里,避免多步骤并行/顺序异常。
常见踩坑排查
- 不要用相对路径指向Python脚本:Jenkins执行构建时的工作目录是任务对应的workspace目录,相对路径会从workspace下检索文件,大概率找不到你存在其他目录的脚本,必须写绝对路径。
- 权限问题:Linux/Mac环境下要给Jenkins运行用户开放脚本所在目录的读权限、脚本本身的执行权限,否则会报
Permission denied错误。 - 依赖问题:Jenkins执行时默认调用系统全局Python环境,如果你脚本用了第三方库,要把对应依赖装到全局Python环境里,或者在执行脚本前先加激活个人虚拟环境的命令。
- 容器化部署的Jenkins:必须提前把宿主机存脚本的目录挂载到Jenkins容器内,否则容器内部无法访问宿主机本地文件。
内容的提问来源于stack exchange,提问作者itsmeanubhav
相关产品推荐
相关产品推荐

