Jenkins:为Stage设置超时并继续执行后续Stage的实现方法
实现远程Shell脚本Stage超时后自动进入下一Stage的方案
嘿,这个需求我刚好在项目里处理过!针对远程节点运行Shell脚本的Stage超时后不中断后续流程的场景,咱们可以用Jenkins Pipeline的timeout步骤结合异常捕获来实现,具体语法和思路如下:
核心思路
用timeout给远程执行的脚本设置超时阈值,当超时发生时,捕获对应的TimeoutException,执行自定义的等待逻辑后,让Pipeline继续推进到后续Stage,完全不会终止整个流程。
完整代码示例
pipeline { agent any stages { stage('远程执行Shell脚本') { steps { script { try { // 设定超时时间:这里是10分钟,可根据实际需求调整 timeout(time: 10, unit: 'MINUTES') { // 方式1:用SSH Pipeline Steps插件的sshCommand执行远程脚本 sshCommand( remote: yourRemoteNodeConfig, // 替换为你的远程节点配置对象 command: '/path/to/your/target/script.sh' ) // 方式2:如果用SSH Agent插件,也可以直接用sh命令远程执行 // sh 'ssh -i /path/to/private-key user@remote-host "/path/to/your/target/script.sh"' } } catch (TimeoutException e) { echo "⚠️ 远程脚本执行超时啦!" // 等待指定时长:这里是5分钟,按需调整 sleep(time: 5, unit: 'MINUTES') echo "等待完成,继续执行后续Stage~" } } } } stage('后续业务Stage') { steps { echo "这是后续的Stage,正在正常执行..." } } } }
关键细节说明
timeout步骤:指定超时的时间和单位(支持SECONDS、MINUTES、HOURS等),超过设定时间会自动抛出TimeoutException- 异常捕获:通过
try-catch块捕获超时异常,避免整个Pipeline因超时失败,转而进入自定义处理逻辑 - 等待逻辑:在
catch块中用sleep步骤实现等待,时间可以根据你的业务需求灵活调整;如果不需要等待,直接输出日志后跳过即可 - 远程执行方式:两种常用方式可选,需要确保Jenkins安装了对应插件(SSH Pipeline Steps或SSH Agent)
内容的提问来源于stack exchange,提问作者Saravanan Jothilingam
相关产品推荐
相关产品推荐

