You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins Pipeline报错:String.filterLine()不匹配CpsClosure2参数求助

问题分析与解决方案

错误核心原因

你遇到的MissingMethodException本质是调用对象类型不匹配:

  • currentBuild.rawBuild.log返回的是普通字符串(java.lang.String),而filterLine()是Groovy中针对Reader/InputStream这类可逐行迭代对象的方法,字符串没有这个方法,因此报错。
  • 至于org.jenkinsci.plugins.workflow.cps.CpsClosure2,这只是Jenkins Pipeline对闭包做CPS序列化后生成的类名,它就是你写的{ line -> line.contains(...) }这个过滤闭包,不是问题根源。

修正代码方案

方案1:分割日志字符串后过滤

直接把日志按行拆分,再筛选匹配内容:

failure { 
   script {
       def logContent = currentBuild.rawBuild.log
       // 按行分割日志,过滤包含指定字符串的行
       def matchedLines = logContent.split('\n').findAll { line ->
           line.contains('my search string')
       }
       // 找到匹配行则重试构建
       if (matchedLines.size() > 0) {
           retry(1) {
               // 注意:不要直接写stage('build'),要执行阶段内的实际逻辑
               // 示例:调用封装好的构建函数
               runBuildStage()
           }
       }
   }
}

// 把build阶段的逻辑封装成可复用函数
def runBuildStage() {
   stage('build') {
       // 这里放你原来build阶段的所有步骤,比如:
       sh 'mvn clean package'
       // ...其他构建操作
   }
}

方案2:用批准的getLog()方法获取日志流

利用你已审批的hudson.model.Run getLog方法,获取可逐行读取的日志对象:

failure { 
   script {
       // 获取最后1000行日志(参数可根据需求调整)
       def logReader = currentBuild.rawBuild.getLog(1000)
       def hasMatch = false
       logReader.eachLine { line ->
           if (line.contains('my search string')) {
               hasMatch = true
               // 找到匹配后提前终止遍历
               return
           }
       }
       if (hasMatch) {
           retry(1) {
               runBuildStage()
           }
       }
   }
}

def runBuildStage() {
   stage('build') {
       // 原build阶段逻辑
       sh 'mvn clean package'
   }
}

关键注意点

  • 不要直接在retry块里写stage('build'),这只是声明阶段,不会执行阶段内的实际步骤,必须把构建逻辑封装成函数调用。
  • 检查匹配结果时,用matchedLines.size() > 0或hasMatch比data != null更准确,因为空过滤结果会返回空列表而非null。

内容的提问来源于stack exchange,提问作者Olivia Brown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 23:01:12