Jenkins管道根据批处理退出代码未能失败

3
我遇到了一个问题,就是 Jenkins 管道在调用批处理文件失败时没有失败。我已经检查了批处理文件,它返回了非零状态码,但不知何故似乎这个状态码并未被考虑在内。你们有没有什么提示可以给我吗?
期望的管道:
node {
  stage('1'){
    dir('_src') {
      bat 'call test.bat'
    }
  }
}

在cmd窗口中调用批处理会产生以下结果。
>call test.bat
INFO: Started ...
ERROR
Press any key to continue . . . 
>echo %ERRORLEVEL%
2

我也使用了以下流程进行测试。
node {
  stage('1'){
    dir('_src') {
      bat '''call test.bat
      echo %ERRORLEVEL%'''
    }
  }
}

...与此输出一起

C:\_src>call test.bat 
INFO: Started ...
ERROR
Press any key to continue . . . 
2

仍然,管道没有失败。有任何想法吗?

bat '''exit 2''' 能正常工作吗?也许你的问题是因为你的阶段内没有 step{ } - Quantic
2个回答

2

应该是:

node {
  stage('1'){
    dir('_src') {
      bat '''call test.bat
      exit %ERRORLEVEL%'''
    }
  }
}

1
即使批处理文件已经使用此错误级别退出,我是否需要显式地使用 exit %ERRORLEVEL% 退出?我原本期望当批处理文件以非零状态代码退出时,阶段会自动失败。这不是这种情况吗? - nogenius
你使用了“call”命令,因此封装的 shell 可能无法获取退出代码。 - yorammi
1
即使没有“调用”,结果仍然相同,阶段也不会失败。可能会在添加退出时起作用,但说实话,如果我必须为每个批处理语句都这样做,那真的不好。 - nogenius
我同意,但可能与“bat”文件有关,可能存在一个错误... 不过它可以运行... - yorammi
我尝试了一下,只有在使用 call 时它似乎是有效的。没有使用 call 我就无法获得任何错误信息。 - Jesper Matthiesen

0

你只是写了一个echo,而没有实际进行返回/退出。尝试在你的脚本中添加一个具体的Exit 0或者在你的情况下Exit 2


回声只是为了调试目的而存在。在第一种情况下,我既不想添加回声,也不想退出,但是我期望当批处理文件失败时,即以非零退出代码退出时,阶段会失败。 - nogenius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接