在 shell 命令变量中捕获 jenkins 作业的结果

Catch outcome of jenkins job in shell command variable

我在 Jenkins 中有一份工作,在执行 Shell 命令中使用两个命令。 第一个做测试工作,第二个从中创建报告。它看起来有点像这样:

node_modules/gulp/bin/gulp.js run-cucumber-tests
node_modules/gulp/bin/gulp.js create-cucumber-report

如果测试失败,命令将以代码 1 退出。这意味着第二个命令甚至不会被触发。但是即使第一个命令失败了,我还是希望创建报告!

我试过这样做:

node_modules/gulp/bin/gulp.js run-cucumber-tests || true
node_modules/gulp/bin/gulp.js create-cucumber-report

现在确实创建了报告,但构建被标记为成功。那不是我想要的。我希望 jenkins 构建作业最终失败,但会创建报告。

我想知道,也许我可以在变量中捕获第一个命令的结果,继续第二个命令,然后然后在第二个命令之后抛出它。

您可以使用 set +e 让脚本在发生错误时继续执行,然后使用 $? 来捕获最后一个命令的结果。使用 exit 您可以将脚本的结果代码强制为先前捕获的值。

set +e

node_modules/gulp/bin/gulp.js run-cucumber-tests
RESULT=$?

node_modules/gulp/bin/gulp.js create-cucumber-report

exit $RESULT