无方法签名:java.lang.String.filterLine()适用于参数类型:(org.jenkinsci.plugins.workflow.cps.CpsClosure2)值:

vql8enpb  于 2023-10-17  发布在  Jenkins
关注(0)|答案(2)|浏览(127)

我是jenkins pipeline的新手,但我试图读取一个失败构建的控制台输出,如果输出中有某行,请重试构建。为了完成下面的工作,我在Jenkins的In-process Script Approval部分批准了这两行:
方法哈德逊.model.Run getLog方法org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper getRawBuild
这就是我目前在所有阶段运行后在post块中尝试的。

failure { 
   script {
       def file = currentBuild.rawBuild.log
       def data= file.filterLine { line ->
           line.contains('my search string')
       }
       if (data != null) {
           retry(1) {
                stage('build') 
           }
       }
   }
}

以下是我得到的完整错误消息:

Error when executing failure post condition:
groovy.lang.MissingMethodException: No signature of method: java.lang.String.filterLine() is applicable for argument types: (org.jenkinsci.plugins.workflow.cps.CpsClosure2) values: [org.jenkinsci.plugins.workflow.cps.CpsClosure2@ec45c79]

我不明白参数/值org.jenkinsci.plugins.workflow.cps.CpsClosure2的类型是什么意思。请帮帮我

8wigbo56

8wigbo561#

由于您只是想查看日志是否包含字符串,请尝试:

currentBuild.rawBuild.getLog(1000).contains("my search string")

1000替换为您想要分析的控制台输出的任意行数。这是从底部开始的行数,它将作为String类型的List返回。.contains可用于滤波。

jucafojl

jucafojl2#

currentBuild.rawBuild.log返回字符串,而不是文件对象。所以String类没有filterLine方法。因此,您可以使用getLogInputStream(),它返回一个具有filterLine()方法的InputStream对象。但更好的选择是要么做MB提到的事情,要么使用findAll()做下面的事情。

def logText = currentBuild.rawBuild.getLog()
def searchPattern = 'my search string'
def data = logText.readLines().findAll { line ->
    line =~ searchPattern
}

相关问题