Jenkins中parallel并行阶段是不同进程还是仅为不同线程?
结论
你示例中parallel块内的两个任务最终会作为独立的操作系统进程运行,并非同一进程下的不同线程。
具体原因
- 首先Jenkins的
sh步骤本身的设计就是每次执行都会生成独立临时shell脚本,由agent节点fork出全新的系统进程调用系统shell(如bash、sh等)执行该脚本,每次sh调用对应独立的进程空间,资源分配完全由操作系统隔离。 - 至于
parallel的调度逻辑:同一node节点下的parallel分支确实是在Jenkins agent进程的不同线程中做调度管理,但这只是Jenkins任务调度层的实现,和你实际执行的sh命令对应的程序运行环境无关,两个sh触发的./firstProgram和./secondProgram都是完全独立的进程,互不共享内存空间。
验证方法
你可以修改代码直接验证,把sh命令替换成输出当前进程ID的逻辑,就能直观看到两个进程的PID不同:
node { parallel ( phase1: { sh "echo phase1 进程ID: \$\$ && sleep 10" }, phase2: { sh "echo phase2 进程ID: \$\$ && sleep 10" } ) }
执行后控制台会输出两个不同的PID,即可确认是独立进程。
内容的提问来源于stack exchange,提问作者msm
相关产品推荐
相关产品推荐

