You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins如何判定Pipeline阶段执行完成以运行下一阶段?

Jenkins 示例中阻塞执行逻辑的实现原理

你贴的这段声明式Jenkinsfile里,阶段串行、命令阻塞等待的逻辑是Jenkins Pipeline默认机制实现的,不需要额外写判断规则,核心判定逻辑如下:

  • 所有不带特殊后台标记的sh步骤天生是同步阻塞模式:执行sh "git clone xxx"时,Jenkins会在当前调度到的构建节点上启动一个独立的shell子进程,把命令传入这个子进程运行,同时当前Pipeline的执行线程会直接挂起,停在当前步骤位置不会向下推进。
  • Jenkins判定命令执行完成的唯一标准是对应的shell子进程退出并返回退出码:执行git clone时,只要拉取代码、写入本地文件的操作没做完,git进程就不会终止,外层的shell子进程也会一直处于运行状态,Jenkins监听到子进程没退出,就会一直等待,不会触发后续步骤。
  • 等git clone全流程执行完毕,git进程正常退出,shell子进程拿到退出码(成功为0,失败为非0)交回给Jenkins的sh步骤,这个步骤才会被标记为执行完成;等当前Clone Repo阶段下所有步骤都标记完成,Pipeline才会自动调度下一个Build阶段开始运行,不存在跨阶段抢跑的可能。

注意:如果你在sh的命令末尾手动加了&这类让进程后台运行的标记,shell会把命令丢到后台后自己先退出,这时候Jenkins会误判命令已经执行完,直接往下走,就会出现不阻塞的异常情况,你给出的示例里没有这类写法,所以全程是按顺序阻塞执行的。

内容的提问来源于stack exchange,提问作者cluster1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 13:03:30