我是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的类型是什么意思。请帮帮我
2条答案
按热度按时间8wigbo561#
由于您只是想查看日志是否包含字符串,请尝试:
将
1000
替换为您想要分析的控制台输出的任意行数。这是从底部开始的行数,它将作为String类型的List返回。.contains
可用于滤波。jucafojl2#
currentBuild.rawBuild.log
返回字符串,而不是文件对象。所以String类没有filterLine
方法。因此,您可以使用getLogInputStream()
,它返回一个具有filterLine()
方法的InputStream对象。但更好的选择是要么做MB提到的事情,要么使用findAll()
做下面的事情。