groovy捕获stdout最后一行

时间:2017-12-22 08:03:52

标签: jenkins groovy

我有问题提取stdout只得到结果,最后一行(第二行)。

我有jenkins管道使用groovy脚本执行以下操作:

    stage('Generate'){
       stdout = bat([
           returnStdout: true, 
           script: 'C:/folder/generate.exe --environment %ENVIRONMENT% --optionalproperties %OPTIONALPROPS%',
           encoding: 'UTF-8'
       ]).trim();

如果我传递echo stdout,捕获这个命令生成的内容,我得到stdout as -

C:\ folder2 \ folder2> C:/folder1/generate.exe - environment PROD --optionalproperties something 12345678

所以我的结果是新行,12345678。我只需捕获这个。

我之前使用过: result = stdout.readLines()。drop(1).split(“”) 而我只是得到了12345678.但它以某种方式停止了工作。

我设法找到了解决方法:

result = stdout.reverse()。take(8).reverse()

取最后8个数字并提取它们。但这不是一个好的解决方案,因为我可能会生成更多或更少的数字,所以我需要一个正确的方法来提取它。

任何建议家伙我可以尝试其他什么,因为我不明白为什么readLines()无法得到任何结果,虽然批处理命令没有改变?

2 个答案:

答案 0 :(得分:1)

换句话说,你需要得到输出的最后一句话。 所以你可以这样做:

result = stdout.tokenize().last()

答案 1 :(得分:0)

def last_text = .tokenize()。last()

echo $ {last_text} //用于打印最后一个文本值