jenkins 管道处理来自 shell 脚本的空输出

jenkins pipeline deal with empty output from shell script

在 Jenkins 管道中,我试图将 shell 脚本的输出检索到变量中。

示例

list_test = sh(script:'ls | grep test', returnStdout:true).trim()
list_test.each { test -> 
   method(test)
}

只要确实有输出,这就可以正常工作。 问题是 'ls | grep test' 的输出为空。

我遇到了一个错误。

到目前为止,我找到的唯一解决方法是:

try {
   list_test = sh(script:'ls | grep test', returnStdout:true).trim()
}

catch (Exception ex) {
    println("output is empty")
}
if (list_test) {
   list_test.each { test -> 
      method(test)
   }
}

有没有更好的方法来处理这类问题?

如果 grep 找不到字符串,它将 return 非零退出代码。

你可以使用类似的东西:

(ls|grep test)||echo "nothing found"

或者你可以使用任何命令(用你喜欢的命令替换'sleep 1'),如果你不需要任何输出:

(ls|grep test)||sleep 1