如何在Jenkins中实现Python脚本的并行构建?
方案1:基于Execute Shell的实现方案
直接在原有execute shell模块中替换为以下代码即可实现并行执行,核心原理是将脚本丢入后台运行,再统一等待所有进程执行结束、校验执行结果:
# 初始化失败计数 FAIL_COUNT=0 # 并行启动所有测试脚本,记录进程ID python test1.py & PID1=$! python test2.py & PID2=$! python test3.py & PID3=$! python test4.py & PID4=$! # 逐个等待进程结束,统计失败任务数 wait $PID1 || FAIL_COUNT=$((FAIL_COUNT+1)) wait $PID2 || FAIL_COUNT=$((FAIL_COUNT+1)) wait $PID3 || FAIL_COUNT=$((FAIL_COUNT+1)) wait $PID4 || FAIL_COUNT=$((FAIL_COUNT+1)) # 存在失败任务则标记构建失败 if [ $FAIL_COUNT -gt 0 ]; then echo "共有${FAIL_COUNT}个测试脚本执行失败" exit 1 fi
该方案优势是无需调整Jenkins任务的原有配置结构,改造成本极低;缺陷是多个脚本的运行日志会混杂输出,无法单独查看单个脚本的执行状态,问题排查难度较高。
方案2:Jenkins原生并行构建策略(更推荐)
如果可以将现有自由风格任务调整为Pipeline类型任务,使用Jenkins内置的并行语法可获得更稳定的效果:
pipeline { agent any stages { stage('并行测试') { parallel { stage('test1.py') { steps { sh 'python test1.py' } } stage('test2.py') { steps { sh 'python test2.py' } } stage('test3.py') { steps { sh 'python test3.py' } } stage('test4.py') { steps { sh 'python test4.py' } } } } } }
该方案支持每个脚本的日志独立隔离、执行状态单独展示,默认所有脚本执行完成后才会进入后续阶段,任意脚本执行失败都会标记整体阶段失败,还可通过添加failFast true配置实现任意脚本失败后立即终止所有并行任务,节省资源。
如果不想改Pipeline,也可以使用Jenkins多配置项目(Matrix Project)插件,通过配置多维度参数对应4个测试脚本,也可以实现并行执行效果。
内容的提问来源于stack exchange,提问作者박인권
相关产品推荐
相关产品推荐

