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

Jenkins script块中If-Else语句不执行问题排查

问题根因
  • Shebang声明失效:你脚本中#!/bin/bash前带有空格,shebang必须处于脚本最开头的前两个字符位置才能生效,因此Jenkins默认使用/bin/sh执行该脚本,而POSIX标准的sh不支持[[ ]]这种Bash专属语法,if判断逻辑直接因语法错误被跳过。
  • 管道退出码取错:Bash中未开启pipefail选项时,管道命令的整体退出码等于最后一个命令的退出码,你当前取的$?实际是最后一个grep -v 'Time elapsed'的执行结果,不是你要判断的第一个grep 'Tests run:'的退出码,判断逻辑完全不符合预期。
修复后代码
script {
    unit_test_result = sh (
        script: '''#!/bin/bash
                    # 捕获第一个grep的执行结果和退出码,避免后续管道干扰
                    test_line=$(mvn clean test | grep 'Tests run:')
                    grep_exit=$?
                    if [[ $grep_exit -eq 1 ]]; then
                        echo "No Unit tests to run!"
                    else
                        echo "$test_line" | grep -v 'Time elapsed'
                    fi
                ''',
        returnStdout: true
    ).trim()
}
修复说明
  • 去掉了shebang前的空格,确保使用Bash执行脚本,支持[[ ]]语法
  • 拆分原有管道逻辑,单独存储第一个grep 'Tests run:'的退出码作为判断依据,不会被后续过滤逻辑干扰
  • 拆分后的逻辑更清晰,不会出现判断对象错误的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:48:02