Jenkins Groovy 解析控制台输出并标记构建失败

91次阅读
没有评论

问题描述

在 Jenkins 使用 Groovy 或 Pipeline 步骤时,希望能够解析 Jenkins 控制台输出,如果匹配到特定字符串,将构建标记为失败。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

在 Jenkins 中,你可以使用 Groovy 的流程控制来实现对控制台输出的解析,并在匹配到特定字符串时将构建标记为失败。以下是一个示例的 Pipeline 脚本,演示如何实现这一功能:

pipeline {
    agent any
    stages {
        stage('Parse Console Output') {
            steps {
                script {
                    def logContainsString = manager.logContains('.*myTestString.*')
                    if (logContainsString) {
                        error("Build failed because of the matched string 'myTestString'")
                    }
                }
            }
        }
        // 添加其他阶段...
    }
    // 添加其他配置...
}

在上面的示例中,我们定义了一个 Pipeline,其中包含一个阶段(stage),用于解析控制台输出。在该阶段的步骤(steps)中,我们使用 Groovy 的脚本(script)块来执行具体操作。在脚本中,我们使用 manager.logContains('.*myTestString.*') 来检查控制台输出是否包含匹配的字符串 ‘myTestString’。如果匹配成功,我们使用 error 方法将构建标记为失败并提供错误消息。

请注意,如果你需要在匹配多个模式时标记构建为失败,你可以使用逻辑运算符 || 连接多个匹配条件,如下所示:

if (manager.logContains('.*myTestString.*') || manager.logContains('.*myTestString2.*')) {
    error("Build failed because of the matched strings")
}

这样可以同时匹配 ‘myTestString’ 和 ‘myTestString2’,如果其中任何一个存在于控制台输出中,就会将构建标记为失败。

方案2

这是另一种方法,使用 currentBuild.rawBuild.getLog 方法获取日志的最后几行,并进行搜索。
你还可以使用 currentBuild.rawBuild.getLog(10) 方法来获取控制台输出的最后几行日志,并对这些日志进行搜索。以下是一个示例 Groovy 脚本,演示如何使用这种方法来解析控制台输出:

pipeline {
    agent any
    stages {
        stage('Parse Console Output') {
            steps {
                script {
                    def logLines = currentBuild.rawBuild.getLog(10)
                    def searchString = 'myTestString'
                    def foundMatch = false
                    for (String line : logLines) {
                        if (line.contains(searchString)) {
                            foundMatch = true
                            break
                        }
                    }
                    if (foundMatch) {
                        error("Build failed because of the matched string '${searchString}'")
                    }
                }
            }
        }
        // 添加其他阶段...
    }
    // 添加其他配置...
}

在上面的示例中,我们使用了 currentBuild.rawBuild.getLog(10) 来获取控制台输出的最后10行日志。然后,我们使用一个循环遍历这些日志行,检查每一行是否包含匹配的字符串 ‘myTestString’。如果找到匹配的字符串,我们使用 error 方法将构建标记为失败并提供错误消息。

这两种方案都可以根据你的需求选择使用。第一种方案适用于需要在整个日志中查找匹配字符串的情况,第二种方案适用于只需要检查最后几行日志的情况。根据你的具体场景,选择合适的方案即可。

正文完