问题描述
在 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
方法将构建标记为失败并提供错误消息。
这两种方案都可以根据你的需求选择使用。第一种方案适用于需要在整个日志中查找匹配字符串的情况,第二种方案适用于只需要检查最后几行日志的情况。根据你的具体场景,选择合适的方案即可。