需求:出现指定编译错误时终止Jenkins Pipeline并排查语法问题
Jenkins Pipeline 问题解决与需求实现
你的脚本语法错误源于混淆了Groovy(Jenkins Pipeline的核心语法)与Shell脚本的if逻辑写法,而且仅通过退出码判断也未必能满足“检测特定错误字符串就终止流水线”的需求——部分场景下npm构建出现类型错误时可能仍返回0退出码。
以下是修正并满足需求的Pipeline脚本:
stage('Dev Build') { steps { script { // 执行构建命令,同时捕获输出内容与退出状态 def buildResult = sh( script: 'npm run build:dev', returnStdout: true, returnStatus: true ) // 检测输出中是否存在目标错误字符串 if (buildResult.stdout.contains('Compiled with the following type errors')) { error('构建触发类型错误,流水线终止') // 抛出错误,强制终止流水线 } // 可选:额外检查命令退出码,双重保障构建状态 if (buildResult.exitCode != 0) { error('构建命令执行失败,流水线终止') } echo 'npm build:dev 执行成功' } } }
核心说明
- 语法修正:用Groovy的
script块包裹逻辑,通过sh步骤的returnStdout和returnStatus参数,同时获取命令的输出内容与退出码(此时sh返回一个包含stdout和exitCode属性的对象)。 - 需求匹配:直接检查构建输出文本是否包含指定错误字符串,一旦匹配就调用
error步骤抛出错误,Jenkins会自动终止流水线并标记为失败。 - 双重校验:保留退出码检查作为额外保障,避免出现输出未捕获到错误但命令实际执行失败的极端场景,可根据实际情况选择保留或移除。
内容的提问来源于stack exchange,提问作者Sachin Dhatrak
相关产品推荐
相关产品推荐

