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

如何让Jenkins Pipeline在curl返回无效状态码时执行完所有请求再失败?

解决Jenkins Pipeline中curl失败后继续执行后续命令再失败的问题

问题的核心在于Jenkins Pipeline的sh步骤默认会在命令返回非0退出码时直接终止流水线。当第一个curl无法连接目标URL时,curl返回退出码7,触发sh步骤抛出异常,导致第二个curl根本没机会执行。

要实现"先执行完所有curl请求,再统一判断失败"的需求,可以按以下方式修改你的Pipeline:

pipeline {
    agent any
    stages {
        stage('Check URL Status Codes') {
            steps {
                script {
                    // 执行第一个curl,通过|| true确保命令始终返回0,避免sh步骤终止流水线
                    def res1 = sh(returnStdout: true, script: 'curl -o /dev/null -sf -w "%{http_code}" http://xyz1.jsp || true').trim().toInteger()
                    echo "First URL status code: ${res1}"
                    
                    // 执行第二个curl,同样处理
                    def res2 = sh(returnStdout: true, script: 'curl -o /dev/null -s -w "%{http_code}" http://xyz2.jsp || true').trim().toInteger()
                    echo "Second URL status code: ${res2}"
                    
                    // 统一判断状态码,若存在无效的000则手动触发构建失败
                    if (res1 == 0 || res2 == 0) { // 000转成Integer后是0
                        error("构建失败:URL返回无效状态码。第一个URL: ${res1},第二个URL: ${res2}")
                    }
                }
            }
        }
    }
}

关键修改点说明:

  • || true 后缀:在每个curl命令后添加|| true,无论curl本身返回什么退出码,整个shell命令的退出码都会变成0,这样sh步骤不会抛出异常,流水线会继续执行第二个curl。
  • 统一错误判断:执行完两个curl后,检查获取到的状态码(注意000转成Integer后是0),如果存在无效状态码,调用error()方法手动标记构建失败,同时输出清晰的错误信息。
  • trim()替代replace(' ',''):更简洁地去除输出中的空格和换行符,避免转换Integer时出错。

这样就能保证所有curl请求都执行完毕后,再根据结果决定是否让构建失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 09:47:44