Jenkins 执行 shell 返回值 命令 vs 文件

Jenkins 执行 shell 返回值 命令 vs 文件

我在 Jenkins 中使用了Execute shell一组不同的命令(调用newman测试应用程序)。当其中一个测试用例失败时newman,我的构建被标记为失败。

以前的Execute shell

newman run ./test/postman_collection_1.json --environment ./test/postman_environment.json --bail
newman run ./test/postman_collection_2.json --environment ./test/postman_environment.json --bail

由于我将所有这些命令移至一个脚本文件,并使用“执行 shell”来执行该脚本文件(它们是之前直接在“执行 shell”中的命令的副本),所以当其中一个 newman 测试用例失败时,我的构建不再标记为失败。

新的Execute shell

chmod +x ./docs/ci_tests.sh
./docs/ci_tests.sh

内容ci_tests.sh

#!/bin/bash
newman run ./test/postman_collection_1.json --environment ./test/postman_environment.json --bail
newman run ./test/postman_collection_2.json --environment ./test/postman_environment.json --bail

当我通过文件使用命令时,命令的返回值(newman)没有触发 Jenkins 失败,原因是什么?

答案1

您必须将 shell 环境设置为在测试失败时退出set -e

-e 当此选项处于打开状态时,当任何命令失败时(由于 Shell 错误后果中列出的任何原因或返回大于零的退出状态),shell 将立即退出,就像通过执行不带参数的 exit 特殊内置实用程序一样,但以下情况除外:多命令管道中任何单个命令的失败不会导致 shell 退出。只应考虑管道本身的失败。

执行 while、until、if 或 elif 保留字之后的复合列表、以 ! 保留字开头的管道或除最后一个之外的任何 AND-OR 列表的命令时,应忽略 -e 设置。

如果除子 shell 命令之外的复合命令的退出状态是由于 -e 被忽略时发生故障而导致的,则 -e 不适用于此命令。

您可以在以下位置找到有关 bash 选项的更多信息set - 设置或取消设置选项和位置参数

所以你的 bash 脚本应该变成

#!/bin/bash
set -e 
newman run ./test/postman_collection_1.json --environment     ./test/postman_environment.json --bail
newman run ./test/postman_collection_2.json --environment ./test/postman_environment.json --bail

相关内容