我正在尝试获取 bat 脚本的输出,无论返回状态如何。
String spectralOutput
try {
spectralOutput = bat(script: '''
@spectral lint "%WORKSPACE%\\SelfContained\\*.json" --ruleset "%WORKSPACE%\\spectral\\.spectral.json"
''', returnStdout: true, encoding: 'UTF-8')
} catch (hudson.AbortException e) {
spectralOutput = spectralOutput.replace('\n', '<br>')
// Parse Spectral output
if (!spectralOutput.contains('0 errors')) {
echo spectralOutput
currentBuild.result = 'FAILED'
}
echo spectralOutput
}
这给了我一个错误
java.lang.NullPointerException: Cannot invoke method replace() on null object
因此,如果 bat 脚本有错误退出代码,它可能会引发异常,并且 SpectrumOutput 中不会存储任何内容...有没有办法始终将输出存储在 SpectrumOutput 中,而不管退出代码如何?
我应该将脚本通过管道传输到文本文件,然后读取该文本文件吗?
returnStatus 和 returnStdout 好像不能一起使用。
这是众所周知的 Jenkins 特质。您必须以两种可能的方式之一修改您的脚本:
bat
比听起来更容易 - 在末尾添加 exit 0
。这样脚本总是会成功,并且您会得到 STDOUT。returnStdout
替换为 returnStatus
。该步骤始终会成功,您可以检查退出代码并对其做出反应。您必须添加 readFile
step 才能获取脚本输出。如果您希望该步骤显示为失败(并且您应该),则必须使用第二种方法,但删除
returnStatus
并让它失败。然后用 try/catch
或 catchError
step 将其包围。