首页 > 解决方案 > Jenkins 脚本化管道 - sh 返回非零退出代码但阶段成功

问题描述

在我的 Jenkins 脚本化管道中,我有一个包含以下 sh 命令的构建阶段:

def buildcmd = "./scriptname.sh"+ <paramters>
def status = sh returnStatus: true, script:"""cd /to/some/dir
eval ${buildcmd}
"""
if(status != 0)
{
   error("Failure")
}

执行后,scriptname以状态 2 退出,status变量也包含 2,作业失败。但是阶段结果显示为SUCCESS。我预计阶段结果和构建结果都是FAILURE.

任何人都可以澄清这一点。

标签: jenkinsjenkins-pipelineshjenkins-groovy

解决方案


返回状态(可选)

通常,以非零状态代码退出的脚本将导致步骤失败并出现异常。如果选中此选项,则步骤的返回值将改为状态码。例如,您可以将其与零进行比较。

资源

如果您的目标只是让舞台失败,请使用returnStatus: false. 不幸的是,我无法告诉您 astatus codeexit code(如上所述)之间的区别。该文档仅告诉您,如果您设置returnStatus: true管道不会因退出代码不等于 0 而失败。

您可以自己设置管道的结果(Source):

if(status != 0)
{
   currentBuild.result = 'FAILURE'
}

推荐阅读